c++ - 如何模板化部分模板特化?

标签 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<> 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/

相关文章:

c++ - 关于在 C++ 中使用模板特征来选择数据类型

c++ 模板类成员函数的部分特化

C++:不允许 void 的部分函数特化 - 替代解决方案?

c++ - 在 C++ 中有替代的 str.find 吗?

c++ - 显示最长的递增子序列

c++ - 如何在 Linux 中使用 PC 扬声器?

html - 如何使用 slim 语法转义 HTML 内容中的方括号?

c++ - .c 程序不需要包含 header ,但 .cpp 程序需要包含 header

c++ - 如何为模板变量赋予随机值?

templates - 部分模板特化,不完整类型的无效使用