Инициализируйте базовый класс C ++, не вводя дважды весь тип базового класса - PullRequest
2 голосов
/ 06 апреля 2020

Я ищу шаблон или технику C ++, которая позволяет избежать некоторой репликации кода.

Я использую оптимизацию пустой базы для некоторых алгоритмов. Когда я наследую от класса, имеющего подробные аргументы шаблона, бывает сложно вводить тот же самый подробный тип в списке инициализатора члена и в качестве основы класса.

Придуманный пример :

template <uint32_t Port, uint32_t Pin>
class Pin;

-

template <typename T>
struct ActiveHigh;

template <uint32_t Port, uint32_t Pin>
struct ActiveHigh : Pin<Port, Pin> // <-- First entry.
{
    ActiveHigh() : Pin<Port, Pin>{ false } {} // <-- Duplicate entry.
};

Я пишу линтер на C ++, который имеет определенную особенность, которая должна действительно использовать оптимизация пустой базы . Благодаря этому шаблону буквально тысячи строк повторяются. У кого-нибудь есть шаблон, который они используют, чтобы преодолеть этот запах кода?

Редактировать 1

Это то, что у меня есть , но это своего рода плохая необходимость писать имя типа при каждом создании.

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете сделать следующее решение:

template <uint32_t PortT,
          uint32_t PinT,
          typename ActualPin = Pin<PortT, PinT>>
struct ActiveHigh : ActualPin
{
    ActiveHigh() : ActualPin{ false } {}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...