我有一个名称空间,其中包含几个已经定义的类
的函数class Object {
struct SubObject{
//...
};
//...
};
namespace Process
{
Object::SubObject function1(Object& o){
//..
}
void function2(Object& o){
//..
}
}
现在,我必须使用模板来概括这些函数,我注意到我不能在整个命名空间中使用一个模板。要么我必须为每个函数创建一个模板(相当乏味,考虑到我每次都必须键入每个类的每个结构),或者我想知道我是否可以做类似定义类而不是命名空间的事情:
template<typename TObject>
class Process
{
typedef typename TObject::SubObject TSubObject;
TSubObject function1(TObject& o){
//..
}
void function2(TObject& o){
//..
}
}
这是正确的代码吗?做一个我永远不会实现的课程似乎很奇怪。
另外,我先写道:
typedef TObject::SubObject TSubObject;
但我的编译器要求我在TObject前面添加typename,我发现这个question解释(或者我理解它的方式)是因为编译器不知道SubObject是嵌套类型还是成员变量。但是不是typedef强制性地跟着一个类型,然后是别名吗? 我认为类成员(变量或函数)不能是“typedef”ed。
提前感谢您的回答。
答案 0 :(得分:0)
C ++语法/规范声明,只要存在可以是类型或变量的限定名称(即使在typedef
上下文中),它将始终被视为变量,除非您在其前面加上它与typename
。