#c #templates #c 11 #typedef
#c #шаблоны #c 11 #typedef
Вопрос:
Есть ли способ использовать typedef в качестве аргумента шаблонной функции? Или способ определения типа в качестве аргумента?
допустим, я хочу передать указатель на функцию этой функции :
template<typename C, typename ...Args>
void test(typedef void (C::*functor)(Args... args) functor f)
{
f(args...);
}
Комментарии:
1. Придирка: я знаю, что это сбивает с толку, но указатель на функцию-член не является ни указателем на функцию, ни указателем. (Интересное чтение по теме: blogs.msdn.com/themes/blogs/generic /… )
Ответ №1:
Нет, вы не можете создать typedef
в параметре. Если ваша цель — избежать повторения типа параметра в теле функции, вы можете использовать decltype
:
template<typename C, typename ...Args>
void test(void (C::*f)(Args...))
{
typedef decltype(f) functor;
}
Ответ №2:
Нет.
Но зачем вам это вообще нужно, когда вы можете написать это:
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.
}
Или вы можете передать экземпляр вместе с аргументами или сделать что-то еще. Я предполагаю, что это просто проверка концепции, и в реальном коде было бы что-то еще.