1

考虑以下将函数作为参数的函数。

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 */);
4

2 回答 2

2

我认为这会起作用:

template <class Function = decltype(&std::forward<int>)> 
void apply(Function&& f = &std::forward<int>);

编辑:实际上,也许不是。你最好只是重载它:

void apply() {
  apply(&std::forward);
}
于 2013-03-05T06:51:46.270 回答
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

于 2013-03-05T07:02:30.413 回答