Здравствуйте, licch, Вы писали:
L>Вот код:
L>L>#include <vector>
L>template <class Elem>
L>class SomeClass
L>{
L>public:
L> vector<Elem> vec;
L> SomeClass (const vector<Elem> &vec_): vec(vec_){}
L>};
L>int main (void)
L>{
L> vector<int> vec;
L> SomeClass<int> sc1(vec); // ок
L> SomeClass sc2(vec); // не ок
L>}
L>
L>Если указывать класс элемента явно, то естественно всё работает. Можно как-нибудь изменить конструктор так, чтобы и вторая строка заработала?
Нет, идет нарушение синтаксиса. Тип шаблона должен указываться явно. (ну или косвенно
иначе возможно было бы:
vector<double> d_vec;
vector<int> vec;
SomeClass sc1(vec), sc2(d_vec); // уже интересно, типы с виду одинаковые
sc1 = sc2; // А что тут делать?
Более того не допустима даже такая конструкция:
class SomeClass
{
public:
template<T>
SomeClass() {}
};
Т.е. тимплейтный конструктор тип которого не может быть явно определен.