我想提供一个(模板化)函数,将(除其他外)具有给定返回类型的函数对象作为参数,理想情况下,我希望能够在没有显式模板参数的情况下调用该函数。
到目前为止,我尝试过:
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)
. 或者这种鸭子打字可能以某种方式?