如何返回依赖于模板参数的函数类型?

时间:2011-08-16 14:52:36

标签: lambda c++11 function-object

我想返回一个std::function,其类型取决于我的函数模板的一个模板参数的类型。

// Return a function object whose type is directly dependent on F
template<typename F, typename Arg1, typename Arg2>
auto make_f2_call(Arg1&& arg1, Arg2&& arg2)
    -> std::function<--what-goes-here?-->
{
    return [arg1, arg2](F f) { return f(arg1, arg2); };
}

// Usage example, so that it's clearer what the function does:
...
typedef bool (*MyFPtrT)(long id, std::string const& name);
bool testfn1(long id, std::string const& name);
...
auto c2 = make_f2_call<MyFPtrT>(i, n); // std::function<bool(F)>
...
bool result = c2(&testfn1);

逻辑--what-goes-here?--应该是函数的函数签名,返回F的返回类型并采用F类型的参数但我似乎无法告诉我的编译器(Visual Studio 2010 Express)这个意图。 (请注意:在使用示例中,它将是std::function<bool(F)>。)

(注意:我尝试了std::result_of<F>::type的变体而没有成功。)

这可能与C ++ 0x一起使用吗?

1 个答案:

答案 0 :(得分:3)

以下为GCC 4.5.3和MSVC 2010 EE SP1编译了

auto make_f2_call(Arg1&& arg1, Arg2&& arg2)
    -> std::function< typename std::result_of<F(Arg1, Arg2)>::type (F)>
{