[英]Can a class be used as generic namespace (using templates)?
我有一个带有几个函数的名称空间,与已经定义的类一起使用
class Object {
struct SubObject{
//...
};
//...
};
namespace Process
{
Object::SubObject function1(Object& o){
//..
}
void function2(Object& o){
//..
}
}
现在,我必须使用模板来概括这些功能,我注意到我不能在整个命名空间上使用一个模板。 我要么为每个函数制作一个模板(考虑到我每次必须对类的每个结构进行typedef,这都很繁琐),或者我想知道是否可以做一些定义类而不是命名空间的事情:
template<typename TObject>
class Process
{
typedef typename TObject::SubObject TSubObject;
TSubObject function1(TObject& o){
//..
}
void function2(TObject& o){
//..
}
}
那是正确的代码吗? 上一门我永远不会讲的课似乎很奇怪。
另外,我首先写道:
typedef TObject::SubObject TSubObject;
但是我的编译器要求我在TObject前面添加typename,我发现这个问题解释了(或者就是我的理解)这是因为编译器不知道SubObject是嵌套类型还是成员变量。 但是typedef不是必须紧随其后的是类型,然后是别名吗? 我认为类成员(变量或函数)不能被“ typedef”定义。
预先感谢您的回答。
C ++语法/规范指出,只要存在一个合格名称,该合格名称可能是类型或变量(即使在typedef
上下文中),除非将其前缀为typename
,否则它将始终被视为变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.