类是否可以用作泛型命名空间(使用模板)
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"ed。
提前感谢您的回答。
C++语法/规范规定,任何时候,只要有一个限定名称可能是类型或变量(即使在typedef
上下文中),它都将被视为变量,除非您在它前面加上typename
。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 错误处理.将系统错误代码映射到泛型
- 使用命名空间时出现多个定义错误
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- CUDA内核和数学函数的显式命名空间
- 链表的泛型函数remove()与成员函数remove)
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- MISRA C++规则 14-5-1:在与类型关联的命名空间中声明的泛型函数模板的名称
- 使用模板或泛型动态命名函数
- 类是否可以用作泛型命名空间(使用模板)
- 从泛型命名空间向前声明类(在std::hash中)