Поэтому у меня есть некоторый базовый класс так:C++ шаблон класса, имеющий конструктор с шаблоном
template<class T1>
class A {
public:
X* x;
template <class T2>
A(const A<T2> &a) {
x = new X(a->x);
}
};
Где как T1 и T2 будут иметь типы наследуемых от X. Тем не менее, этот код не работает и Я действительно не могу понять, как я буду писать его, чтобы конструктор смог взять еще A с потенциально различным аргументом шаблона.
Поэтому, чтобы было ясно, что я хочу написать конструктор, который принимает, будет иметь значение A с другим параметром шаблона. (Код компилируется как есть, часть шаблона просто не работает так, как я хочу).
То, что я хочу быть в состоянии сделать: (Где как Y и Z наследует от X)
A<Z> a1;
A<Y> a2(a1);
Любая помощь очень ценится!
Извините, я подумал, что смогу создать хороший пример и не должен использовать мой фактический код, но, похоже, я немного сработал с синтаксисом, так что вот мой настоящий класс немного сократил:
template <class T>
class Calendar {
private:
Date *d;
public:
template <class T2>
Calendar(const Calendar<T2> &c) {
d = new T(c.view_date_component());
}
Calendar();
~Calendar();
const Date& view_date_component() const;
};
template <class T>
Calendar<T>::Calendar() {
d = new T();
}
template <class T>
Calendar<T>::~Calendar() {
delete d;
}
template <class T>
const Date& Calendar<T>::view_date_component() const {
return *d;
}
Как вы используете конструктор 'A'? вы можете создать небольшой 'main()', описывающий случай, и показать, какой результат вы ожидаете? –
Это не имеет никакого отношения к шаблонам. Вы неправильно используете указатели и ссылки (например, используя '->' в ссылке). – interjay
Для этого нужен конструктор по умолчанию. – 101010