Я пытаюсь написать частично специализированную функцию шаблона в теле шаблона class/struct. Частичная специализация выполняется для выполнения рекурсивного метапрограммирования шаблонов.Шаблон метапрограммирования внутри тела класса шаблона
template<size_t N>
struct my_class {
template<size_t D> double my_func(...){}
template<> double my_func<0>(...){}
double other_func(...){ return my_func<N-1>(...); }
};
но г ++ (с использованием -std = C++ 0x варианта ) жалуется говоря, не может частично специализировать шаблон функции в классе/структуру и заставляет меня написать шаблон функции my_func вне область видимости класса в отдельном пространстве имен, как если бы они были статическими, в конечном счете передавая все переменные класса и делая код очень беспорядочным (все переменные-члены, на которые было бы легко ссылаться это).
Есть ли способ, который может сделать частичную специализацию по шаблону (я мог бы выполнять функции как статические члены частных подкласс my_class тоже) и метапрограммирование в пределах одного класса?
Это делает код чище и намного проще в обслуживании. Я использую Ubuntu 12.04 и gcc 4.6.
Приветствие
SFINAE для победы, а? :-) Я искренне надеялся, что новый стандарт поддерживает частично заданный метапрограммирование шаблонов из коробки, без этих уродливых синтаксических трюков ... – Emanuele
См. Версию шаблона 'If' alias, которую я добавил, что я думаю о лучшем синтаксисе, который вы может попасть в C++ 11. Если концепции превращаются в C++ 17, вы сможете использовать ограничения. –