LINUX.ORG.RU

C++, наследование шаблонного класса


0

0

Базовый класс:
template<typename T>
class A{
public:
virtual ~A(){}
A(int){printf("base class\n");}
};

Производный:
class B:public A<char*>{
public:
B(int var):A<char*>(var){printf("derived class\n");}
};

Можно ли избежать указания A<char*>(var) в списке инициализации конструктора производного класса? Т.е. сделать примерно так (именно так не работает):
B(int var):A(var){}

В <char*> из этого примера ничего ужасного нет, но у меня несколько параметров, причем один из них сам состоит из нескольких шаблонов, так что копипаста разрастется нехило.

PS. Курение книги по шаблонам с++ в ТУДУ, так что не предлагать.

★★★★★

например так:

template<typename T> 
class A{ 
  public:
    virtual ~A(){} 
    A(int){printf("base class\n");} 
}; 
 
class B:public A<char*>{ 
  typedef A<char*> Parent;
  public: 
    B(int var):Parent(var){printf("derived class\n");} 
}; 
 

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Спасибо. Немного оптимизировал ваши предложения и вынес typedef из класса. Теперь мегастроку писать только один раз.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

Из класса выносить кстате не надо... так сразу понятно для чего это, и что это... а так потом ищи, где у тебя чего и как объявленно. Все же этот тайпдеф локален по своей сути, и используется только в объявлении класса.

Cy6erBr4in ★★★
()
Ответ на: комментарий от Cy6erBr4in

> Из класса выносить кстате не надо...

Ну если рядом написать и обозвать как-нибудь удачно, то почему бы и нет.

Вот если нужно сделать template<class T> class B: public A<T>... то от двукратного написания A со всеми причендалами уже не отвертишься :)

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.