Специализация функции шаблона-члена в шаблоном classе

У меня есть шаблонный шаблон с функцией шаблона-члена

template class A { public: template CT function(); }; 

Теперь я хочу специализировать функцию шаблона-члена двумя способами. Сначала для того же типа, что и class:

 template template // Line gcc gives an error for, see below T A::function() { return (T)0.0; } 

Второй для типа bool:

 template template bool A::function() { return false; } 

Вот как я пытаюсь проверить это:

 int main() { A a; bool b = a.function(); double d = a.function(); } 

Теперь gcc дает мне строку, отмеченную выше:

 error: invalid explicit specialization before '>' token error: enclosing class templates are not explicitly specialize 

Так gcc говорит мне, что я должен специализироваться на A, если я хочу специализировать функцию, правильно? Я не хочу этого делать, я хочу, чтобы тип внешнего classа был открытым …

Является ли окончательный ответ: это невозможно? Или есть способ?

Да, это проблема:

 error: enclosing class templates are not explicitly specialized 

Вы не можете специализировать участника, не специализируясь на classе.

Что вы можете сделать, это поместить код из function в отдельный class и специализироваться на том, что, как и basic_string, зависит от отдельного classа char_traits. Затем неспециализированная function может вызвать помощника в classе признаков.

Вы можете использовать перегрузку, если вы измените реализацию.

 template  class Foo { public: template  CT function() { return helper((CT*)0); } private: template  CT helper(CT*); T helper(T*) { return (T)0.0; } bool helper(bool*) { return false; } }; 

Простой и легкий 🙂

Interesting Posts
Давайте будем гением компьютера.