допустим, у вас есть класс A
(C ++ 17):
template<class T>
struct A
{
A() = default;
A(T t) : val(t)
{
}
A operator*(A a)
{
return A(a.val * this->val);
}
T val;
};
Однако в 99% случаев тип-значения A
будет int
, поэтому вы используете руководство по вычетам для уменьшения многословия:
A()->A<int>;
Так что это круто, теперь вы можете определять переменные без списка шаблонов:
A myVar;
Проблема, с которой я сталкиваюсь, заключается в том, что она, похоже, выходит из строя, когда дело доходит до сигнатур функций, например, следующее требует использования списка аргументов шаблона:
auto ASquared = [](A a, A b) { return a * b; };
ошибка C2955: «A»: использование шаблона класса требует аргумента шаблона
список
Когда я хотел сделать вывод, что A
было A<int>
.
Мой вопрос: это внутреннее ограничение, или я просто пропускаю другое руководство по выводам, которое могло бы заставить этот синтаксис работать?