powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение наследования при помощи препроцессора
3 сообщений из 3, страница 1 из 1
Определение наследования при помощи препроцессора
    #38170589
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
Определение наследования при помощи препроцессора
    #38172187
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafКак избавится от её определения при помощи препроцессора ?

Никак. На этапе работы препроцессора отсутствует любая семантическая информация.
Тут, скорее, нужно использоавть is_base_of из type_traits.
...
Рейтинг: 0 / 0
Определение наследования при помощи препроцессора
    #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
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Определение наследования при помощи препроцессора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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