Производный класс скрывает имя набора перегрузки из базового класса, если производный класс имеет одно и то же имя, но мы всегда можем ввести, что перегрузка установлена с использованием-объявления:
template <class BASE>
class A : public BASE
{
public:
using BASE::some_method;
void some_method();
}
Но что, если я введу все наборы перегрузок из вариационных базовых классов? Смогу ли я написать что-то вроде этого?
template <class... BASES>
class A : public BASES...
{
public:
using BASES::some_method...;
void some_method();
}
Я рассмотрел использование вспомогательного класса, например:
template <class... BASES>
struct helper;
template <>
struct helper<> {};
template <class OnlyBase>
struct helper<OnlyBase> : OnlyBase
{
using OnlyBase::some_method;
};
template <class Base1, class... OtherBases>
struct helper<Base1, OtherBases> : public Base1, public helper<OtherBases...>
{
using Base1::some_method;
using helper<OtherBases...>::some_method;
};
И это действительно работает. Но для этого требуется много ввода (конечно, я могу использовать макрос, но, когда это возможно, я стараюсь использовать функцию компиляции С++), и когда я хочу ввести больше методов, я должен многое изменить в этом фрагменте кода.
Идеальный ответ был бы простым синтаксисом, но если его нет, я перейду со вспомогательным классом.