从模板类继承的正确方法是什么?模板参数是继承类中的嵌套类?
class SomeClass : public TemplateClass<NestedClass>
{
class NestedClass {};
};
答案 0 :(得分:4)
没有办法专门做那件事。如果您真的必须继承TemplateClass<NestedClass>
,则必须将NestedClass
声明移出SomeClass
。
答案 1 :(得分:0)
我看不出你怎么能这样做。有这个:
template<class T> class TemplateClass {};
class NestedClass {};
class SomeClass : public TemplateClass<NestedClass>
{
typedef NestedClass NestedClass;
};
但那只是假装......
答案 2 :(得分:-1)
您必须至少声明NestedClass:
class NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<NestedClass>
{
class NestedClass{};
};
这很有效。在Windows上测试MinGW c ++。
更新: @乔恩 我在Windows XP上使用gcc版本3.4.5尝试了以下内容:
#include <iostream>
class NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<NestedClass>
{
public:
class NestedClass{
public:
int a;
static int test(){ return 100; }
};
NestedClass nc;
};
int main(){
SomeClass sc;
sc.nc.a = 10;
std::cout<< sc.nc.a << std::endl;
std::cout<< sc.nc.test() << std::endl;
}
并且,我得到以下输出: 10 100
但是,我想作者的意图(如@jon所建议的)实际上是这样的:
class SomeClass::NestedClass;
template<class T> class TemplateClass{};
class SomeClass : public TemplateClass<SomeClass::NestedClass>
{
public:
class NestedClass{};
NestedClass nc;
};
这不起作用。原因是为了能够在模板规范中声明SomeClass :: NestedClass,应该声明SomeClass。但是,我们正在努力做到这一点 - 因此我们得到了循环依赖。
所以我猜@ jon的答案最能解决这个问题。