Как вернуть тип функции, зависящий от аргумента шаблона? - PullRequest
3 голосов
/ 16 августа 2011

Я хотел бы вернуть 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 Ответ

3 голосов
/ 16 августа 2011

Следующие компиляции для меня с 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)>
{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...