3

我有一个类定义看起来像这样的情况:

template<class T>
class Alpha< Bravo<T> >
{
....
};

我正在使用 gnu g++ 进行编译,编译器抱怨 Alpha 是“不是模板”。

我已经看到在编写 Bravo 的库中使用了相同的技术,并且 Bravo 是一个模板类。我错过了什么吗?我已经将 Alpha 剥离到了骨子里,并在没有编译成功的情况下完成了测试。我还尝试从我在 Bravo 的库中看到这个工作的地方复制+粘贴代码,同样的事情,没有成功,同样的错误。

提前致谢。

4

2 回答 2

6

您所拥有的是部分模板专业化;但是,任何模板专业化都需要一个模板来专业化,而没有。

template<class T>
class Alpha;

template<class T>
class Alpha<Bravo<T> >
{
    // ...
};
于 2011-06-14T18:57:50.440 回答
4

您需要先声明一个主模板。你写的是专业。

//primary template - the definition is optional
template<class T>
class Alpha
{
};

//specialization
template<class T>
class Alpha< Bravo<T> >
{
};
于 2011-06-14T18:57:55.280 回答