可能重复:
在可变参数模板中使用声明
我最近遇到了一种通用机制,用于组合两个函数对象以形成一个新的函数对象,其行为就像前两个被重载一样:
template <typename F1, typename F2>
struct overload : public F1, public F2
{
overload(F1 f1, F2 f2) : F1(f1), F2(f2) {}
using F1::operator();
using F2::operator();
};
我正在尝试使用可变参数模板将这个想法扩展为适用于 N 个函数对象:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
但是,GCC 抱怨我尝试对 using 声明进行可变参数扩展:
test.cpp:6:24: error: parameter packs not expanded with '...':
using Fs::operator();...
^
test.cpp:6:24: note: 'Fs'
test.cpp:6:26: error: expected unqualified-id before '...' token
using Fs::operator();...
^
我尝试了一些变化,例如:
using Fs::operator()...;
和
using Fs...::operator();
但也不行。
是否有可能做到这一点?