我正在尝试获取我绑定的函数的返回类型。在这个实例中,我希望看到GetFactorialResult
(int)的返回类型。
#include <iostream>
#include <boost/core/demangle.hpp>
#include <typeinfo>
namespace
{
const int testNumber = 10;
int GetFactorialResult(int number)
{
if (number > 1)
{
return number * GetFactorialResult(number - 1);
}
else
{
return 1;
}
}
template <typename Func, typename... Args>
void Submit(Func&& func, Args&&... args)
{
auto boundTask = std::bind(std::forward<Func>(func), std::forward<Args>(args)...);
using ResultType = typename std::result_of<decltype(boundTask)()>::type;
char const * name = typeid( ResultType ).name();
std::cout << boost::core::demangle( name ) << std::endl;
}
}
int main()
{
Submit([](int number)
{
GetFactorialResult(number);
}, number);
return 0;
}
输出
void
0
当我打印boundTask
的类型时,我看到了我的期望:
std :: _ Bind&lt; \ main :: {lambda(int)#1}(int)&gt; (反斜杠不是 存在,但无法弄清楚如何在没有它的情况下显示它。)
我认为我因为decltype(boundTask)()
而无效,但是如果我删除了括号,则无法编译。
我只能访问c ++ 11功能。