繁体   English   中英

是否可以将类用作通用名称空间(使用模板)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM