考虑以下函数将函数作为参数。
template <class Function = std::plus<int> >
void apply(Function&& f = Function());
此处std::plus<int>
是应用的默认函数。 std::plus<int>
是一个函数对象,一切运行良好。
现在,我想传递std::forward<int>
作为默认参数。 std::forward<int>
不是函数对象,这是一个函数指针。怎么做?
template <class Function = /* SOMETHING */ >
void apply(Function&& f = /* SOMETHING */);
答案 0 :(得分:2)
我认为这会奏效:
template <class Function = decltype(&std::forward<int>)>
void apply(Function&& f = &std::forward<int>);
编辑:实际上,也许不是。你最好只是重载它:
void apply() {
apply(&std::forward);
}
答案 1 :(得分:2)
std::forward<int>
的函数指针类型为int &&(*)(int &)
。所以你的功能看起来像这样:
template<class T = int &&(*)(int &)>
void apply(T &&t = &std::forward<int>);
看看如何声明std :: forward:http://en.cppreference.com/w/cpp/utility/forward