Шаблонный класс терпит неудачу, принимая другой шаблонный класс - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть шаблонный класс, который принимает ссылку на этот шаблон в качестве единственного аргумента в constrcutor. Это работает нормально, пока параметр шаблона не станет классом, который также является шаблонным. Компилятор (VS 2008) дает мне пару ошибок, но я не могу найти, как решить эту проблему ...

EDIT это из фактического источника:

PerlinNoise<> per;
RawPainter< PerlinNoise<> > pat(per);
TextureGenerator<RawPainter<PerlinNoise<> > genn(pat);

где PerlinNoise имеет параметры шаблона по умолчанию, а RawPainter и TextureGenerator получают ссылку (из типа T) в конструкторе

Итак, как я могу заставить это работать? Возможно, это где-то простое дополнительное имя типа, но я не могу понять, как оно.

1010 * ТНХ *

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011
 int pod = 5;
 B<int> myB(pod); //OK

Это работает.B<int> требует int& для построения.Поскольку pod является целым числом, его можно легко преобразовать в правильный тип.

A<int> myA;
B< A< A<int> > > myB2(myA); //COMPILE ERROR

Ну, это не может работать.Конструктор для B< A< A< int > > > требует A< A< int > >, а вы передаете ему A< int >.Нет доступного преобразования, поэтому нет способа получить правильный тип для передачи конструктору.

Ваш компилятор должен был объяснить это вам.Мой сделал:

error: no matching function for call to B<A<A<int> > >::B(A<int>&)
note: candidates are:
note: B<T>::B(T&) [with T = A<A<int> >]
note:   no known conversion for argument 1 from A<int> to A<A<int> >&
note: B<A<A<int> > >::B(const B<A<A<int> > >&)
note:   no known conversion for argument 1 from A<int> to const B<A<A<int> > >&

Это раздача: no known conversion for argument 1 from A<int> to A<A<int> >&.В последней строке сообщается, что компилятор также пытался использовать неявный конструктор копирования, но это тоже не удалось.

1 голос
/ 24 ноября 2011

Передайте правильную ссылку в конструктор:

A<A<int> > myAA;
B< A< A<int> > > myB3(myAA); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...