Вывод аргумента шаблона в сигнатуре функции с помощью руководства - PullRequest
0 голосов
/ 30 октября 2018

допустим, у вас есть класс 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>.

Мой вопрос: это внутреннее ограничение, или я просто пропускаю другое руководство по выводам, которое могло бы заставить этот синтаксис работать?

1 Ответ

0 голосов
/ 30 октября 2018

Язык не позволяет этого. Удержание не происходит в сигнатуре функции, потому что нечего выводить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...