Используя класс, который наследует класс шаблона в качестве параметра конструктора в классе шаблона? - PullRequest
0 голосов
/ 07 октября 2010

Скажите, у меня есть следующее:

template <class T>
class Foo {};

и потомок класса,

class Bar : public Foo<some_typename>{};

Как бы я мог передать Bar конструктору Foo без Foo.h, включая Bar.h, если это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 07 октября 2010
0 голосов
/ 07 октября 2010

это необычно, но часто есть способы обойти это, в зависимости от ваших потребностей (возможно, уточните?).

понимаю, что имеет смысл передавать еще один бар в Foo.

в этом случае вы можете:

1) создайте второй параметр шаблона в Foo и выложите интерфейс, необходимый при построении:

template < typename T, typename Bar_ >
class Foo {
   /* ... */
   Foo(Bar_& bar) : weight_(bar.getWeight()) {
   }
   /* ... */

2) или просто используйте шаблон ctor:

template < typename Bar_ >
Foo(Bar_& bar) : weight_(bar.getWeight()) {
}

3) если Foo + Bar легковесен, вы можете просто создать расширенный список инициализации, используемый Bar в init.

4) поскольку это шаблон (а реализация должна быть видимой для его подкласса и иметь специальную связь), вы также можете объявить ctor Foo, который принимает Bar по указателю, а затем просто определить конструктор Foo в Bar.hpp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...