Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套类型作为基类的模板参数_C++_Templates - Fatal编程技术网

C++ 嵌套类型作为基类的模板参数

C++ 嵌套类型作为基类的模板参数,c++,templates,C++,Templates,可能吗 例如: template<class T> class A {}; class B : public A<B::C> { public: struct C {}; }; 模板 A类{}; B类:公共A { 公众: 结构C{}; }; 问题是B::C是未声明的标识符(这是显而易见的原因),我不知道如何使它工作。 总之:模板参数设置为C时,B能否从A派生?否。B此时不完整,因为您尚未定义它应该从中继承的类。因此,此处不可能引用B::C(嵌套类/结构取决于其封

可能吗

例如:

template<class T>
class A {};

class B : public A<B::C>
{
public:
  struct C {};
};
模板
A类{};
B类:公共A
{
公众:
结构C{};
};
问题是B::C是未声明的标识符(这是显而易见的原因),我不知道如何使它工作。
总之:模板参数设置为C时,B能否从A派生?

否。
B
此时不完整,因为您尚未定义它应该从中继承的类。因此,此处不可能引用
B::C
(嵌套类/结构取决于其封闭类/结构的完整定义,因为嵌套类型可能而且通常确实取决于封闭类/结构的定义)。

建议解决方法:将
C
移出
B
,然后
typedef
将其放入
B
中,如果需要将其作为子类型。或者甚至(在我的第二个解决方案中,您应该将
B::C
作为一个专门化
C
)第一个就是我所做的,但现在我更喜欢第二个。很高兴我能帮上忙。嗯,我想这取决于总体设计/用例,哪种方法更适合。