Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение наследования при помощи препроцессора / 3 сообщений из 3, страница 1 из 1
01.03.2013, 10:33
    #38170589
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение наследования при помощи препроцессора
1. есть базовый класс
Код: plaintext
1.
2.
3.
4.
5.
class Base
{
public:
  virtual void Foo();
};


2. есть класс-шаблон
Код: plaintext
1.
2.
3.
4.
5.
6.
template<class T>
class Derived: T
{
public:
  void Foo();
};


В большинстве случаев предполагается, что параметр T будет наследником от Base, а значит Derived<t>::Foo() будет виртуальным.
Но не всегда, в таком случае Derived<t>::Foo() будет не виртуальной, а попросту она и вообще в таком случае не нужна.
Как избавится от её определения при помощи препроцессора ?
С уважением, Naf
...
Рейтинг: 0 / 0
02.03.2013, 23:09
    #38172187
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение наследования при помощи препроцессора
NafКак избавится от её определения при помощи препроцессора ?

Никак. На этапе работы препроцессора отсутствует любая семантическая информация.
Тут, скорее, нужно использоавть is_base_of из type_traits.
...
Рейтинг: 0 / 0
03.03.2013, 00:04
    #38172222
override is_base_of
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение наследования при помощи препроцессора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
template<class T>
class Derived: T
{
    static_assert(std::is_base_of<Base, T>::value, "The template parameter T isn't derived from Base!");
public:
  virtual void Foo() override;
};


А зачем это понадобилось в вашем конкретном случае?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение наследования при помощи препроцессора / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]