我有一些功能模板,例如
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())
. 但这需要为我的每个函数模板编写一个单独的适配器。
是否有一种通用方法可以将函数模板调整为多态函数对象,即我可以为需要调整的每个函数模板重复使用某种机制,而不必为每个函数模板单独声明一些东西?