Удобно вызывать шаблонные классы

Столкнулась с тем что неудобно прописывать шаблоны каждый раз в конструкторе класса. Пример

template<class T>
class A{
T &type_class;

public:
A(T &type_class_)
:type_class(type_class_)
{};
  
};
class B{};
class C{};

int main()
{
    B b;    
    A<B> a{b};
    std::vector<A<B>> ab;
    return 0;
}

получается если нужно создавать несколько классов А нужно обязательно прописывать в какому классу шаблона относится. Как можно доработать, не прописывая A несколько раз?

P.S знаю что можно использовать наследование, я хочу разобраться как можно удобно пользоваться шаблонами


Ответы (1 шт):

Автор решения: KoVadim

Если у Вас компилятор с поддержкой 17 стандарта и для компилятора очевиден тип, то он может сам вывести.

A<B> a{b};

можно записать вот так

A a{b};

и компилятор догадается.

А вот std::vector<A<B>> ab; - никак. компилятору не очевиден тип переменной ab без подсказки. Но если подсказать

std::vector ab{a,a,a};

или

std::vector ab{10,a};

то все у компилятора получится.

→ Ссылка