たとえば、いくつかの関数テンプレートがあります
template <typename T>
void foo(T);
template <typename T>
void bar(T);
// others
そして、私はそれぞれをさまざまなタイプで呼び出すアルゴリズムに渡す必要があります。
template <typename F>
void some_algorithm(F f)
{
// call f with argument of type int
// call f with argument of type SomeClass
// etc.
}
some_algorithm
関数テンプレートをインスタンス化せずに渡すことはできませんが、いくつかの異なる型の引数を使用して呼び出す必要があるため、特定の型でインスタンス化することもできません。
関数テンプレートを多形関数オブジェクトに適合させることができます。
struct foo_polymorphic
{
template <typename T>
void operator()(T t)
{
foo(t);
}
};
次に、それをとして渡しますsome_algorithm(foo_polymorphic())
。ただし、これには、関数テンプレートごとに個別のアダプターを作成する必要があります。
関数テンプレートをポリモーフィック関数オブジェクトに適応させる一般的な方法はありますか?つまり、それぞれに個別に何かを宣言することなく、適応する必要のある関数テンプレートごとに再利用できるメカニズムはありますか?