我有一个模板化的类,它将该模板的引用作为构造函数中的单个参数。这很好用,直到模板参数变成一个也模板化的类。编译器(VS 2008)给了我一些错误,但我找不到如何解决这个问题......
EDIT 这是来自实际来源:
PerlinNoise<> per;
RawPainter< PerlinNoise<> > pat(per);
TextureGenerator<RawPainter<PerlinNoise<> > genn(pat);
其中PerlinNoise有默认模板参数,RawPainter和TextureGenerator都在构造函数中引用(来自类型T)
那么,我怎样才能做到这一点? 它可能是一个简单的额外类型名称,但我似乎无法弄明白。
THX
答案 0 :(得分:2)
int pod = 5;
B<int> myB(pod); //OK
这很有效。 B<int>
需要int&
来构建。由于pod
是一个int,因此可以简单地将其转换为正确的类型。
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 :(得分:1)
将正确的引用传递给构造函数:
A<A<int> > myAA;
B< A< A<int> > > myB3(myAA);