如果派生类定义了相同的名称,则派生类对基类隐藏重载集的名称,但我们总是可以使用 using-declaration 引入该重载集:
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;
};
它确实有效。但这需要大量的输入(当然我可以使用宏,但我会尽可能使用 c++ 的编译时功能),当我想引入更多方法时,我必须在那段代码中进行很多更改。
一个完美的答案将是一个简单的语法,但如果没有,我将使用辅助类。