Dan*_*ica 2 c++ parameters inheritance templates
我有以下代码的问题:
class SymmetryTypes
{
public:
enum Type { REAL, COMPLEX, INTEGER, PATTERN, UNINITIALIZED };
void f() { cout << "SymmetryTypes::f() invoked" << endl; };
};
template <class T>
class EnumBase : public T
{
public:
EnumBase() /* : t_(T::UNINITIALIZED) */ { T::f(); }
private:
// T::Type t_;
};
int main(int argc, char* argv[])
{
EnumBase<SymmetryTypes> symmetry;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译,但当我取消注释它没有.看来我可以访问基类T的函数成员,但是不能访问枚举成员及其值(也尝试过typedef).你知道为什么吗?
T::Type 是指一种类型,所以你需要 typename
typename T::Type t_;
Run Code Online (Sandbox Code Playgroud)
如果省略typename,它会在解析模板时认为您正在声明一个名称为的成员T::Type(然后t_由于之后没有第二个名称而出错).记住它在那时还不知道还有什么T.这里可以找到更详细的解释.
成员初始化程序很好.编译器可能会因成员声明无效而感到困惑.
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |