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)-有没有建议如何移动元组?