0

我想提供一个(模板化)函数,将(除其他外)具有给定返回类型的函数对象作为参数,理想情况下,我希望能够在没有显式模板参数的情况下调用该函数。

到目前为止,我尝试过:

template<A, B, F>
B some(A a, F f) { return f(a); }

template<A, B>
B some(A a, B (*f)(A)) { return some<A, B, B (*)(A)>(a, f); }

我有重载以使模板 args 完全可推断,至少对于函数指针而言。现在看来我无法将模板特化为std::unary_function,因为它不包含operator()成员,所以它不适合作为F.

此外,对于函子似乎没有任何解决方案,因为我无法通知编译器我希望 F 拥有B operator()(A). 或者这种鸭子打字可能以某种方式?

4

1 回答 1

0

std::unary_function只是应该提供的其他类的基础operator()。根本没有实例unary_function,所以我看不到问题 - 第一个采用 3 个模板参数的函数是此类问题的官方解决方案。

编辑:如果您想在没有显式模板参数的情况下调用该函数,请使用std::result_of(C++11) 或boost::result_of.

于 2013-03-10T20:32:41.200 回答