我甚至不确定提出这个问题的标题是什么;希望代码能够展示我正在尝试做的事情:
#include <string>
#include <list>
using namespace std;
template<typename A> class Alpha { public: A m_alpha_a; };
template<typename B> class Bravo { public: B m_bravo_b; };
template<> class Alpha<string> { public: string m_alpha_string; };
template<typename B>
template<> class Alpha<Bravo<B> >
{
public:
Bravo<B> m_bravo_class; // Line A
};
int main()
{
Alpha<int> alpha_int;
alpha_int.m_alpha_a= 4;
Alpha<string> alpha_string;
alpha_string.m_alpha_string = "hi";
Alpha<Bravo<int> > alpha_bravo_int;
alpha_bravo_int.m_bravo_class.m_bravo_b = 9;
};
当A是任何类型Alpha<A>
时,我想为Bravo<B>
编写专门化,但编译器说
在'&gt;'标记之前无效的显式专精化 封闭类模板没有明确专门化
(参考// Line A
。)做我想做的正确语法是什么?
答案 0 :(得分:4)
只需替换
template<typename B>
template<> class Alpha<Bravo<B> >
与
template<typename B>
class Alpha<Bravo<B> >
即。在此处删除template<>
。
答案 1 :(得分:1)
您的问题似乎是重复的模板规范。你只需要使用一个。像这样:
#include <string>
#include <list>
using namespace std;
template<typename A>
class Alpha { public: A m_alpha_a; };
template<typename B>
class Bravo { public: B m_bravo_b; };
template<> class Alpha<string> { public: string m_alpha_string; };
template<typename B>
class Alpha< Bravo<B> >
{
public:
Bravo<B> m_bravo_class; // Line A
};
int main()
{
Alpha<int> alpha_int;
alpha_int.m_alpha_a= 4;
Alpha<string> alpha_string;
alpha_string.m_alpha_string = "hi";
Alpha<Bravo<int> > alpha_bravo_int;
alpha_bravo_int.m_bravo_class.m_bravo_b = 9;
};