重複の可能性:
可変個引数テンプレートでの宣言の使用
最近、2つの関数オブジェクトを組み合わせて、最初の2つがオーバーロードされたかのように動作する新しい関数オブジェクトを形成するための一般的なメカニズムに出会いました。
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();
しかし、どちらもトリックを行いません。
これを行うことは可能ですか?