但我不确定应该使用什么类型的函数?
函数类型看起来像float(float)
.
或者你的意思是返回类型?在现代 C++ 中,您可以推断返回类型:
template <typename F>
auto Eval(const F & f) -> decltype(f(3.14)) {
return f(3.14);
}
如果您坚持使用旧版本的语言,那么它会相当棘手。您可以为普通函数和包含result_type
定义的函数类型(例如从 派生的函数类型std::unary_function
)提供重载:
template <typename Ret, typename Arg>
Ret eval(Ret (&f)(Arg)) {return f(3.14);}
template <typename F>
typename F::result_type eval(F const & f) {return f(3.14);}
也许通过定义一个特征类或使用Boost 的函数特征来概括这一点
那么,是不是应该这样调用呢?
如果只有一个具有该名称的函数,则可以使用参数相关查找:
Eval(sin);
但是,如果 this 是std::sin
,则有多个重载,因此您必须指定类型:
Eval<float(float)>(sin);
此外,我们为什么要使用指针(&-symbol)?
我们没有。那是参考,不是指针。
我们通过引用传递参数是因为我们想改变它吗?
不,它是对 的引用const
,所以我们无法更改它。
如果不是,为什么我们需要 & 符号?
有些类型的复制成本很高;别人根本无法复制;但所有类型都可以通过引用传递。所以一个完全通用的函数模板需要通过引用来获取它的参数,以便对所有类型都可用。