C++ 用于继承的模板构造函数
我不完全确定我在这里选择的方法是否正确,因此我将首先概述问题: 我需要一个基类(可以是抽象的),它为它的所有子级保存一个方便的构造函数,该构造函数返回该子级的静态实例,并接受类型为C++ 用于继承的模板构造函数,c++,templates,c++11,C++,Templates,C++11,我不完全确定我在这里选择的方法是否正确,因此我将首先概述问题: 我需要一个基类(可以是抽象的),它为它的所有子级保存一个方便的构造函数,该构造函数返回该子级的静态实例,并接受类型为boost::tuple或boost::tuple的参数 我的基类是什么样子的: class BaseClass{ public: template<typename TCLASS, typename TUPLE> static TCLASS* createPacketFromStruc
boost::tuple
或boost::tuple
的参数
我的基类是什么样子的:
class BaseClass{
public:
template<typename TCLASS, typename TUPLE>
static TCLASS* createPacketFromStruct(TUPLE s){
TCLASS* p = new TCLASS();
p->structure = s;
p->createMessageFromStruct();
return p;
}
};
类基类{
公众:
模板
静态TCLASS*createPacketFromStruct(元组s){
TCLASS*p=新的TCLASS();
p->structure=s;
p->createMessageFromStruct();
返回p;
}
};
但是我无法从该模板中获取静态实例。您应该能够这样调用函数:
MyClass* myClass = BaseClass::template createPacketFromStruct<MyClass,MyTuple>(s);
(不确定是否真的需要
模板
,可能基类::createPacketFromStruct(&myClass,s);
也可以工作)您应该能够这样调用函数:
MyClass* myClass = BaseClass::template createPacketFromStruct<MyClass,MyTuple>(s);
(不确定是否真的需要
template
,可能是BaseClass::createPacketFromStruct(&myClass,s);
也可以工作)您的问题似乎是如何调用您编写的方法?在这种情况下,以下答案应该比其他答案更简单:
MyClass* myClass = BaseClass::createPacketFromStruct<MyClass>( s );
MyClass*MyClass=BaseClass::createPacketFromStruct;
模板
关键字不需要,因为基类
本身不是模板。另外,您不需要指定第二个模板参数。您的问题似乎是如何调用您编写的方法?在这种情况下,以下答案应该比其他答案更简单:
MyClass* myClass = BaseClass::createPacketFromStruct<MyClass>( s );
MyClass*MyClass=BaseClass::createPacketFromStruct;
模板
关键字不需要,因为基类
本身不是模板。另外,您不需要指定第二个模板参数。我对这个问题很不清楚。为什么createPacketFromStruct
是类的(静态)成员,而不是一些自由函数?TCLASS
是否派生自BaseClass
?结构是私有的吗?另外:boost::tuple
或boost::tuple
没有任何意义。我想把它用作一个构造函数,比如BaseClass*c=BaseClass::creaspacketfromstruct(…);结构确实是私有的,并且随着孩子的变化而变化;我根据你的建议编辑了文本(丢失了)。那么你有什么问题?“我无法从该模板获取静态实例”是什么意思?(您还应该将元组和&s
作为参数,并使用p->structure=std::forward(s);
)感谢对std::forward的提示。遗憾的是,在这一部分中,我使用的是GCC4.2(我知道,我说的是C++11)-有没有关于如何移动元组的建议?这个问题对我来说很不清楚。为什么createPacketFromStruct
是类的(静态)成员,而不是一些自由函数?TCLASS
是否派生自BaseClass
?结构是私有的吗?另外:boost::tuple
或boost::tuple
没有任何意义。我想把它用作一个构造函数,比如BaseClass*c=BaseClass::creaspacketfromstruct(…);结构确实是私有的,并且随着孩子的变化而变化;我根据你的建议编辑了文本(丢失了)。那么你有什么问题?“我无法从该模板获取静态实例”是什么意思?(您还应该将元组和&s
作为参数,并使用p->structure=std::forward(s);
)感谢对std::forward的提示。遗憾的是,在这一部分中,我使用的是GCC4.2(我知道,我说的是C++11)-有没有建议如何移动元组?