如何使用std :: result_of返回函数类型而不是void

时间:2018-06-04 15:17:58

标签: c++11 templates std auto result-of

我正在尝试获取我绑定的函数的返回类型。在这个实例中,我希望看到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功能。

0 个答案:

没有答案
相关问题