Вызвать конструктор копий базового класса
От: Аноним  
Дата: 20.03.09 08:04
Оценка:
Если базовый класс — шаблон, как?
template<typename T>
class CBase : public T
    {
public:
    CBase();
    CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
Re: Вызвать конструктор копий базового класса
От: Bell Россия  
Дата: 20.03.09 08:11
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Если базовый класс — шаблон, как?

А>
А>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)
{
}

Любите книгу — источник знаний (с) М.Горький
Re[2]: Вызвать конструктор копий базового класса
От: Аноним  
Дата: 20.03.09 08:21
Оценка:
Здравствуйте, Bell, Вы писали:

А>>Если базовый класс — шаблон, как?

А>>
А>>template<typename T>
А>>class CBase : public T
А>>    {
А>>public:
А>>    CBase();
А>>    CBase(const T& src) : T(src); // - так конечно нельзя, а так: (static_cast<T&>(*this))(src) - ругается :(
А>>


B>Зато вот так не ругается:


Черт, действительно не ругается, а я решил что так нельзя потому что Т — это тип, а не переменная. И делает именно то, что надо.
Re[3]: Вызвать конструктор копий базового класса
От: Аноним  
Дата: 20.03.09 15:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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 не переменная ни разу ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.