我不完全确定我在这里选择正确的方法,所以我将首先勾勒出问题:
我需要一个基类(可能是抽象的),它为所有孩子保留一个便利构造函数,返回该子项的静态实例,并接受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;
}
};
但我无法从该模板中获取静态实例。
答案 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
本身不是模板。此外,您无需指定第二个模板参数。