Я новичок в шаблонах c ++ и (совершенно безуспешно) пытаюсь заставить компилятор выводить аргумент typename шаблона при инициализации.
Вот мой код.
template <typename T>
class C
{
public:
T a;
C(T a) : a(a) {}
C(const C<T>& other) : a(other.a) {}
};
int main()
{
C<int> x(1);
C y{ x };
return 0;
}
Этот код, скомпилированный g ++, приводит к ошибке.
test.cpp:13:11: error: missing template arguments before ‘y’
C y{ x };
^
Я бы хотел сохранить этот синтаксис - просто C без явного указания аргумента шаблона.
Я пытался использовать направляющие вычеты, но возникла только другая ошибка.
template <typename T> C(const C<T>& other) -> C<T>;
Когда я вставил эту строку ниже определения класса C, я получил это.
test.cpp:10:51: error: expected constructor, destructor, or type conversion before ‘;’ token
template <typename T> C(const C<T>& other) -> C<T>;
^
Другая ошибка произошла, когда я поместил эту строку в определение класса C (вверху).
C(const C<T>& other) -> C<T>;
test.cpp:4:26: error: ‘C’ function with trailing return type not declared with ‘auto’ type specifier
C(const C<T>& other) -> C<T>;
^~~~
В обоих случаях первое упоминание об ошибке по-прежнему присутствует.
Спасибо!