Tho*_*ser 2 c++ templates c++11
我正在尝试使用CRTP模式编写模板.我想要的是模板访问static const模板化类中的a.
我的模板在它自己的标题中看起来像这样:
template <class T> foo {
static const int readValue = T::value
}
Run Code Online (Sandbox Code Playgroud)
我继承了这样的模板(在另一个头文件中):
class fooImpl: foo<fooImpl> {
static const int value = 42;
}
Run Code Online (Sandbox Code Playgroud)
然而,clang抱怨说:
'fooImpl'中没有名为'value'的成员
我想我在这里得到了鸡肉和鸡蛋的问题.模板不知道定义fooImpl,因此value在实例化时不能知道它有成员.
但是我该如何解决呢?有没有办法将const值的编译时间传播到实例化模板中?
该foo<fooImpl>基类实例化的基类列表中,但是fooImpl是一个不完整的类型在这一点上,并foo::value没有被宣布呢.
您可以稍后移动静态成员的定义:
template <class T> struct foo {
static const int readValue;
};
class fooImpl: foo<fooImpl> {
static const int value = 42;
};
template<class T> const int foo<T>::readValue = T::value;
Run Code Online (Sandbox Code Playgroud)
但是,这不允许您readValue在体内使用编译时常量foo.