用于继承的模板便捷构造函数

时间:2013-04-23 09:42:02

标签: c++ templates c++11

我不完全确定我在这里选择正确的方法,所以我将首先勾勒出问题:

我需要一个基类(可能是抽象的),它为所有孩子保留一个便利构造函数,返回该子项的静态实例,并接受boost::tuple<std::string>boost::tuple<short, int>类型的参数。

我的基类是什么样的:

class BaseClass{

public:

    template<typename TCLASS, typename TUPLE>
    static TCLASS* createPacketFromStruct(TUPLE s){
        TCLASS* p = new TCLASS();
        p->structure = s;
        p->createMessageFromStruct();
        return p;
    }
};

但我无法从该模板中获取静态实例。

2 个答案:

答案 0 :(得分:1)

您应该可以像这样调用函数:

MyClass* myClass = BaseClass::template createPacketFromStruct<MyClass,MyTuple>(s);

如果您希望编译器推断模板参数,请更改函数的签名以采用类型为TCLASS**的其他参数,并将其调用为:

MyClass* myClass;
BaseClass::template createPacketFromStruct(&myClass, s);

(不确定是否真的需要template,也许BaseClass::createPacketFromStruct(&myClass, s);可以正常工作)

答案 1 :(得分:0)

看来你的问题是如何调用你写的方法?在这种情况下,以下应该比其他答案更容易:

MyClass* myClass = BaseClass::createPacketFromStruct<MyClass>( s );

不需要template关键字,因为BaseClass本身不是模板。此外,您无需指定第二个模板参数。