Если базовый класс — шаблон, как?
template<typename T>
class CBase : public T
{
public:
CBase();
CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
Здравствуйте, Аноним, Вы писали:
А>Если базовый класс — шаблон, как?
А>А>template<typename T>
А>class CBase : public T
А> {
А>public:
А> CBase();
А> CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
А>
Зато вот так не ругается:
template<typename T>
class CBase : public T
{
public:
CBase();
CBase(const T& src) : T(src) {}
};
и вот так тоже не ругается:
template<typename T>
class CBase : public T
{
public:
CBase();
CBase(const T& src);
};
template<class T>
CBase<T>::CBase(const T& src) : T(src)
{
}
Здравствуйте, Bell, Вы писали:
А>>Если базовый класс — шаблон, как?
А>>А>>template<typename T>
А>>class CBase : public T
А>> {
А>>public:
А>> CBase();
А>> CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
А>>
B>Зато вот так не ругается:
Черт, действительно не ругается, а я решил что так нельзя потому что Т — это тип, а не переменная. И делает именно то, что надо.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Bell, Вы писали:
А>>>Если базовый класс — шаблон, как?
А>>>А>>>template<typename T>
А>>>class CBase : public T
А>>> {
А>>>public:
А>>> CBase();
А>>> CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
А>>>
B>>Зато вот так не ругается:
А>Черт, действительно не ругается, а я решил что так нельзя потому что Т — это тип, а не переменная. И делает именно то, что надо.
очень орригинальное заявление ...
а ничего, что это стандартный прием вызова конструктора базового класса с параметрами?
class Base
{
public:
Base(int n){}
};
class Derived:public Base
{
Derived(int n):Base(n){}
};
здесь тоже Base не переменная ни разу ...