C++ 如何将部分模板专门化模板化?
我甚至不知道该给这个问题起什么标题;希望代码能够演示我正在尝试做的事情:C++ 如何将部分模板专门化模板化?,c++,templates,partial-specialization,C++,Templates,Partial Specialization,我甚至不知道该给这个问题起什么标题;希望代码能够演示我正在尝试做的事情: #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<&g
#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;
};
#包括
#包括
使用名称空间std;
模板类Alpha{public:A m_Alpha_A;};
模板类Bravo{public:bm_Bravo_B;};
模板类Alpha{public:string m_Alpha_string;};
模板
模板类Alpha
{
公众:
Bravo m_Bravo_class;//行A
};
int main()
{
α-α-int;
alpha_int.m_alpha_a=4;
阿尔法字符串;
alpha_string.m_alpha_string=“hi”;
阿尔法·阿尔法·布拉沃·因特;
alpha_bravo_int.m_bravo_class.m_bravo_b=9;
};
当a是任何类型的Bravo
时,我想为Alpha
编写一个专门化,但是编译器说
“>”标记之前的显式专门化无效封闭类模板不是显式专门化的 (参考
//行A
)做我想做的事的正确语法是什么?只要替换即可
template<typename B>
template<> class Alpha<Bravo<B> >
模板
模板类Alpha
与
模板
阿尔法类
i、 e.在此处删除
模板。您的问题似乎是重复的模板规范。您只需要使用一个。像这样:
#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;
};
#包括
#包括
使用名称空间std;
模板
类Alpha{public:A m_Alpha_A;};
模板
类Bravo{public:B m_Bravo_B;};
模板类Alpha{public:string m_Alpha_string;};
模板
阿尔法级
{
公众:
Bravo m_Bravo_class;//行A
};
int main()
{
α-α-int;
alpha_int.m_alpha_a=4;
阿尔法字符串;
alpha_string.m_alpha_string=“hi”;
阿尔法·阿尔法·布拉沃·因特;
alpha_bravo_int.m_bravo_class.m_bravo_b=9;
#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;
};