0
我有几个功能,我用的是已经定义类可以用作通用名称空间(使用模板)吗?
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的前面加上类型名,我发现这个question解释(或者这就是我理解它),这是因为编译器没有按不知道SubObject是嵌套类型还是成员变量。但是不是typedef强制后跟一个类型,然后是一个别名? 我认为一个类成员(一个变量或函数)不能被“typedef”编辑。
非常感谢您的回答。
如果没有实例,你不能调用你的示例中的函数,那么你需要使它们成为“静态”函数!另一种选择是简单地在名称空间级别提供模板化函数。 –
@πάνταῥεῖ:是的,但我必须为命名空间中的每个函数创建一个模板,并为每个函数中的每个嵌套类型创建一个typedef(我在Object中有十几个嵌套类型,我想避免使用typedef/typename每次)。 – Demod
然后在模板类中使用静态函数的其他选项。 –