我什至不知道该给这个问题起什么标题;希望代码能够演示我正在尝试做的事情:
#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;
};
我想为 Alpha<A>
编写一个特化当 A 为任意类型 Bravo<B>
时,但编译器说
invalid explicit specialization before ‘>’ token
enclosing class templates are not explicitly specialized
(引用 // Line A
。)执行我想要的操作的正确语法是什么?
最佳答案
直接替换即可
template<typename B>
template<> class Alpha<Bravo<B> >
与
template<typename B>
class Alpha<Bravo<B> >
即删除template<>
在这里。
关于c++ - 如何模板化部分模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836956/