Я пытаюсь вызвать специализацию функции-члена класса шаблона, которая возвращает значение из конструктора класса, и я не могу найти правильный синтаксис (если он существует).Ниже приведен мой код, а ниже - сообщения об ошибках от компилятора (не компоновщика).
#include <iostream>
class A {};
class B {};
template <typename T>
class C
{
public:
C()
{
std::cout << "C constructed." << std::endl;
std::cout << name() << std::endl;;
}
template constexpr const char * name();
};
template <> const char * C<A>::name() { return "You got an A."; }
template <> const char * C<B>::name() { return "You got a B."; }
int main()
{
C<A> c_a;
C<B> c_b;
return 0;
}
Сообщения об ошибках: g ++ -std = c ++ 11 -o t1 t1.cpp t1.cpp: 19: 18: ошибка: ожидается «<» перед шаблоном «constexpr» constexpr const char * name ();^ t1.cpp: 22: 26: ошибка: идентификатор шаблона 'name <>' для const char * C :: name () 'не соответствует ни одному шаблону объявления шаблона <> const char * C :: name () {вернуть «Вы получили А.»;} ^ t1.cpp: 22: 37: note: увидел 1 'template <>', нужно 2 для специализации шаблона функции-члена template <> const char * C :: name () {return "Вы получили A.";} ^ t1.cpp: 23: 26: ошибка: идентификатор шаблона 'name <>' для const char * C :: name () 'не соответствует ни одному шаблону объявления шаблона <> const char * C :: name (){return "У тебя есть Б.";} ^ t1.cpp: 23: 37: примечание: увидел 1 'template <>', нужно 2 для специализации шаблона шаблона функции-члена <> const char * C :: name () {return "Вы получили B.";}
Я искал и нашел много обсуждений кода, вызывающего это сообщение об ошибке, но ни случаи, ни рекомендации не кажутся достаточно близкими, чтобы иметь отношение к делу.Кроме того, если я не пытаюсь вернуть что-либо из специализированной функции-члена - если она имеет тип возврата void и просто печатает в cout - тогда это работает так, как я ожидал,т.е. я вижу напечатанный текст с правильными значениями.
Можно ли сделать то, что я пытаюсь сделать?Если так, то как?Спасибо!