Можно ли автоматически выводить параметры шаблона базового класса из конструктора? - PullRequest
0 голосов
/ 06 июня 2018

Этот пример кода работает и делает именно то, что должен.

template <typename T>
struct base {
    base(T a) {};
};

struct b : public base<int> {
    b() : base(3) {};
};

Я хочу использовать функцию C ++ 17 с параметрами шаблона автоматического вывода из конструктора и сделать что-то вроде этого:

struct b : public base { // note lack of <int>
    b() : base(3) {};
};

Возможно ли это вообще без некрасивых хаков?

1 Ответ

0 голосов
/ 06 июня 2018

Правила вывода аргументов шаблона не допускают этого.И вряд ли они когда-либо будут.Подумайте об этом:

struct b : public base { // note lack of <int>
    b()    : base(3) {}
    b(int) : base(false) {}
};

Какой сейчас базовый класс b?Можно утверждать, что это возможно, если все инициализации базового класса согласуются с типом.Но на практике это трудно проверить (подумайте об отдельных объектных файлах, в которых находятся c'ors), и кажется, что IMO слишком ниша функции, чтобы быть полезной.

Итак, резюмируя, вы не можете избежать указанияАргументы шаблона для шаблона базового класса.

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