我的CRTP派生类有一些我使用static constexpr定义的编译时固定维度。现在,我想将它用作基类中的静态变量。我该怎么做呢?
示例:
#include <array>
template <class D>
class Base
{
public:
void myfunc()
{
auto n = derived_cast().n;
std::array<size_t, n> a;
}
private:
auto derived_cast() -> D&
{
return *static_cast<D*>(this);
}
auto derived_cast() const -> const D&
{
return *static_cast<const D*>(this);
}
};
class A : public Base<A>
{
public:
A() = default;
private:
friend class Base<A>;
static constexpr size_t n = 2;
};
int main()
{
A a;
a.myfunc();
return 0;
}此操作失败,出现以下错误:
error: non-type template argument is not a constant expression
std::array<size_t, n> a;
^我也考虑过使用
std::array<size_t, derived_cast().n> a;但失败的原因是:
error: non-type template argument is not a constant expression
std::array<size_t, derived_cast().n> a;
^~~~~~~~~~~~~~~~那么我应该放什么呢?
发布于 2021-05-31 02:54:22
发布于 2021-05-31 03:02:53
std::array<size_t, D::n> https://stackoverflow.com/questions/67764720
复制相似问题