C++ 类模板实例化为类型模板参数,语法? XY类{}; 模板 甲级 { (...) }; 模板 B类 { (...) }; (...) B*属性;//

C++ 类模板实例化为类型模板参数,语法? XY类{}; 模板 甲级 { (...) }; 模板 B类 { (...) }; (...) B*属性;//,c++,class,templates,syntax,type-parameter,C++,Class,Templates,Syntax,Type Parameter,class关键字仅用于定义模板类,不用于声明对象。为此,您只需要: class XY{}; template<typename typeA> class A { (...) }; template<typename typeB> class B { (...) }; (...) B<class <class XY>A> * attribute; // <- How can I do that without Syntaxerror

class
关键字仅用于定义模板类,不用于声明对象。为此,您只需要:

class XY{};

template<typename typeA>
class A
{
(...)
};
template<typename typeB>
class B
{
(...)
};
(...)
     B<class <class XY>A> * attribute; // <- How can I do that without Syntaxerror
B*属性;
或者为了清晰起见,将其展开:

B<A<XY> >* attribute;
typedefamya;
typedef B-MyB;
MyB*属性;

关键字
class
仅用于定义模板类,不用于声明对象。为此,您只需要:

class XY{};

template<typename typeA>
class A
{
(...)
};
template<typename typeB>
class B
{
(...)
};
(...)
     B<class <class XY>A> * attribute; // <- How can I do that without Syntaxerror
B*属性;
或者为了清晰起见,将其展开:

B<A<XY> >* attribute;
typedefamya;
typedef B-MyB;
MyB*属性;

您的问题很不清楚,但我认为您在寻找模板参数。这样:

typedef A<XY> MyA;
typedef B<MyA> MyB;
MyB* attribute;

你的问题很不清楚,但我认为你在寻找模板参数。这样:

typedef A<XY> MyA;
typedef B<MyA> MyB;
MyB* attribute;

正确的语法是
B*属性
,如果你想用XY来实例A,用
A来实例B
正确的语法是
B*属性
,如果你想用XY来实例A,用
A来实例B
值得注意的是
B*属性
是C++11之前的语法错误。(对于C++11之前的版本,您必须执行
B*属性;
,否则
>
将解析为右移位运算符。C++11语法经过调整,因此
>
可以根据上下文以多种方式解析。)是的,它认为这是移位运算符。@cdhowie修复,我已经习惯了这些天不打空格了。值得注意的是
B*属性
是C++11之前的语法错误。(对于C++11之前的版本,您必须执行
B*属性;
,否则
>
将解析为右移位运算符。C++11语法经过调整,因此
>
可以根据上下文以多种方式解析。)是的,它认为这是移位运算符。@cdhowie修复,我已经习惯了这些天不打空格了。@MartinErhardt我编辑了你问题的标题,这误导了我,希望没问题。有趣的是,这不是我要求的,而是我在稍后的实现中需要的。但是我如何在Foo中使用U?:“错误:'U'没有命名类型”你需要实例化
U
(如
U
). <代码>U是一个实际的模板,而不是它的任何实例化,所以它确实不是一个类型。@MartinErhardt我编辑了你的问题标题,这误导了我,希望没关系。有趣的是,这不是我要求的,而是我稍后在我的实现中需要的。但是我如何在Foo中使用U?:“错误:'U'没有命名类型”您需要实例化
U
(如
U
U
是一个实际的模板,而不是它的任何实例化,因此它确实不是一个类型。