Я пытаюсь написать контейнерный класс, используя boost :: ptr_vector. Внутри ptr_vector я бы хотел включить разные классы. Я пытаюсь добиться этого с помощью статических шаблонов, но пока я не могу этого сделать. Например, класс контейнера -
class model {
private:
boost::ptr_vector<elem_type> elements;
public:
void insert_element(elem_type *a) {
element_list.push_back(a);
}
};
и я пытаюсь использовать разные классы elem_type. Код ниже не соответствует моим требованиям:
template <typename T>class model {
private:
boost::ptr_vector<T> elements;
public:
void insert_element(T *a) {
element_list.push_back(a);
}
};
потому что, когда я инициализирую контейнерный класс, я могу использовать только один класс в качестве шаблона:
model <elem_type_1> model_thing;
model_thing.insert_element(new elem_type_1)
но не elem_type_2:
model_thing.insert_element(new elem_type_2)//error, of course
Можно сделать что-то вроде использования шаблонов только на элементе?
class model {
private:
template <typename T> boost::ptr_vector<T> elements;
public:
void insert_element(T *a) {
element_list.push_back(a);
}
}; //wrong
Так я могу вызвать insert_element для определенного класса, который я хочу вставить? Обратите внимание, что я не хочу использовать виртуальные члены.
Спасибо!