Можно ли использовать typedef в сигнатуре шаблонной функции? - PullRequest
0 голосов
/ 14 ноября 2011

Есть ли способ использовать typedef в качестве аргумента функции шаблона? Или способ определить тип в качестве аргумента?

скажем, я хочу передать указатель на функцию:

template<typename C, typename ...Args>
void test(typedef void (C::*functor)(Args... args) functor f)
{
   f(args...);
}

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Нет, вы не можете сделать typedef в параметре. Если ваша цель - избежать повторения типа параметра в теле функции, вы можете использовать decltype:

template<typename C, typename ...Args>
void test(void (C::*f)(Args...))
{
   typedef decltype(f) functor;
}
0 голосов
/ 14 ноября 2011

номер

Но зачем вам это вообще нужно, когда вы можете написать это:

template<typename C, typename ...Args>
void test(void (C::*f)(Args...), Args... args)
{
   C c;   //f is a member function, so need an instance of class
   (c.*f)(args...);  //call the function using the instance.
}

Или вы можете передать экземпляр вместе с аргументами или сделать что-то еще. Я предполагаю, что это просто подтверждение концепции, а в реальном коде было бы что-то еще.

...