我想导出一个类型 Test
来自模板类型 Base
我专注于派生类型(即 Base<Test>
)。
在模板化类型中,我想使用在派生类型(模板参数)中定义的 typedef。
但是,我得到了这个编译错误:
error C2039: 'X' : is not a member of 'Test'
这是代码片段:
template <typename T>
class Base
{
protected:
void func(typename T::X x) {}
};
class Test : public Base<Test>
{
public:
typedef int X;
};
这是否可行,如果可行,我需要做的修复是什么?
(我看到了针对此类问题的几个答案,但看起来我的场景并没有通过前缀类型名来修复 - 它是否与从专门用于派生类型的模板派生有关?)
最佳答案
除了 typedef,您还可以将类型声明为基类中的第二个模板参数:
template <typename T, typename X>
class Base
{
protected:
void func(X x) {}
};
class Test : public Base<Test, int>
{
public:
// typedef int X;
};
关于c++ - 如何在模板中使用嵌套的 typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014922/