1

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

我需要一个基类(可能是抽象的),它为它的所有子类保存一个便利构造函数,该构造函数返回该子类的静态实例,并接受类型为boost::tuple<std::string>or的参数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;
    }
};

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

4

2 回答 2

1

您应该能够像这样调用该函数:

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

如果您希望编译器推断模板参数,请更改函数的签名以获取额外的类型参数TCLASS**并像这样调用它:

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

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

于 2013-04-23T10:33:42.100 回答
0

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

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

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

于 2013-04-23T13:13:35.357 回答