В C++ 11 можно в «Наследовать Конструктор»:Наследовать Конструкторы из баз в параметре пакете
struct A{ };
struct B : A{
using A::A;
};
При определенных обстоятельствах (см обсуждения ниже) также можно нескольких конструкторов Наследовать.
struct D : A, B, C{
using A::A;
using B::B;
using C::C;
};
Наконец, можно также наследовать обобщенно от всех типов в параметре упаковке:
template<class... Ts>
struct D2 : Ts...{};
Вопрос: Можно ли наследовать все конструкторы базовых классов в общем? Как это:
template<class... Ts>
struct D2 : Ts...{
using Ts::Ts...; // ??? compiler error
};
таким образом, что эквивалентно struct D2<A, B, C>
с struct D
выше.
[EWG issue 102] (http://cplusplus.github.io/EWG/ewg-active.html#102), [CWG issue 1393] (http://www.open-std.org/jtc1/ sc22/wg21/docs/cwg_closed.html # 1393), поэтому я предполагаю, что раньше, чем C++ 1z –
@PiotrSkotnicki, для 'D ' будет эквивалентно 'struct D: A, B, C {с использованием A :: A; с использованием B :: B; используя C :: C;}; '. Я думаю, что в этом смысле ответ Барри не эквивалентен. – alfC
@alfC Но это тоже не легально. – Barry