Я пытаюсь получить возвращаемый тип функции, с которой я связываюсь. В этом случае я ожидал увидеть возвращаемый тип 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 <\ main :: {lambda (int) # 1} (int)> (обратный слеш не существует, но не может понять, как отобразить его без него).
ПолагаюЯ становлюсь недействительным из-за того, что я делаю decltype(boundTask)()
, но если я уберу скобку, она не скомпилируется.
У меня есть доступ только к функциям c ++ 11.