模板化课程没有参加其他模板课程

时间:2011-11-23 22:59:37

标签: c++ templates

我有一个模板化的类,它将该模板的引用作为构造函数中的单个参数。这很好用,直到模板参数变成一个也模板化的类。编译器(VS 2008)给了我一些错误,但我找不到如何解决这个问题......

EDIT 这是来自实际来源:

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

其中PerlinNoise有默认模板参数,RawPainter和TextureGenerator都在构造函数中引用(来自类型T)

那么,我怎样才能做到这一点? 它可能是一个简单的额外类型名称,但我似乎无法弄明白。

THX

2 个答案:

答案 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);