Я не совсем уверен, что я выбираю правильный подход здесь, так что я обрисовать проблему первый:Шаблон удобства конструктор для наследования
Мне нужен базовый класс (может быть абстрактным), что имеет место конструктор удобства для всех его дочерних элементов, который возвращает статический экземпляр этого дочернего элемента плюс принимает параметр типа 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;
}
};
Но я не могу получить статический экземпляр из этого шаблона.
Вопрос для меня совершенно неясен. Почему 'createPacketFromStruct' является (статическим) членом класса, а не некоторой свободной функцией? Является ли 'TCLASS' производным от' BaseClass'? Является ли 'структура' частной? Также: 'boost :: tuple' или' boost :: tuple' не имеет смысла. –
Я хочу использовать его в качестве конструктора, такого как BaseClass * c = BaseClass :: creasePacketFromStruct (...); структура действительно является частной и меняется от ребенка к ребенку; Я отредактировал текст (затерялся) в соответствии с вашими предложениями. – dos
Тогда в чем проблема? Что вы подразумеваете под «Я не могу получить статический экземпляр из этого шаблона»? (Вы также должны взять 'TUPLE && s' в качестве параметра и использовать' p-> structure = std :: forward (s); ') –