[英]CRTP: use static constexpr from derived class
我的 CRTP 派生的 class 具有一些我使用static constexpr
定義的編譯時固定維度。 現在我想將它用作基礎 class 中的 static 變量。 我該怎么做呢?
例子:
#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;
^~~~~~~~~~~~~~~~
那我應該放什么?
std::array<size_t, D::n>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.