Я пытаюсь специализировать шаблон класса объявлен как таковой:Специализируется класс для общей функции, возвращающей указатель на функцию
template<typename T> class A;
для функции, возвращающей указатель на функцию. Это должно быть общей сигнатурой для любой заданной ясности функции.
Таким образом, если предположить, что я знаю, как C/C++ синтаксис работы, специализация должна выглядеть примерно так на функцию, возвращающую некоторый тип ResultType
:
template<typename ResultType, typename Arg1, typename Arg2>
A<ResultType(Arg1, Arg2)> {...};
И расширяется, что к тому ResultType быть указатель на функцию должен что-то вроде этого:
template<typename FpResultType, typename FpArg1, typename Arg1, typename Arg2>
A<(ResultType(*)(FpArg1))(Arg1, Arg2)> {...};
Это, однако, приводит к «недопустимому параметру шаблона» в GCC 4.6.
Насколько я знаю, typedefs здесь нет. Добавление класса утилиты для создания typedef для меня также является необязательным, поскольку оно перемещает типы из списка типов имен в объявлении шаблона в другой тип шаблона и «скрывает» их от специализации шаблона A (что приводит к компиляции, что объявленные имена не используются в специализации).
Я бы предпочел избежать длинной сложной цепочки enable_ifs и структур утилит. Но, если это единственный способ сделать это, meh.
Какова подпись указателя функции, которую вы хотите вернуть? – jrok