c++ - 如何将类成员专门化为多个模板值(常量)?

标签 c++ templates template-specialization

我想专门化模板类的成员方法。该模板类有一个 int 类型的常量模板参数,并且根据值必须选择不同的全局变量:

template <int INSTANCE>
class mailbox
{
public:
    void write(uint32_t v);
}

// global accessors of different instances
extern mailbox<0> mailbox0;
extern mailbox<1> mailbox1;

以及稍后的 .cpp 文件

template<>
void mailbox<0>::write(uint32_t v)
{
    access(reg_0, v);
}

template<>
void mailbox<1>::write(uint32_t v)
{
    access(reg_1, v);
}

mailbox<0> mailbox0;
mailbox<1> mailbox1;

这允许我按如下方式使用邮箱:

mailbox0.write(0xdeadcafe);

这会编译并链接。我想通过使用常量 INSTANCE 来简化该方法:

template<int INSTANCE>
void mailbox<INSTANCE>::write(uint32_t v)
{
    if (INSTANCE == 0)
        access(reg_0, v);
    else
        access(reg_1, v);
}

但我无法找出正确的语法来使其工作。在保持我的用户代码不变的情况下这是否可能?对于我想要用 C++ 俚语执行的操作,正确的单词和术语是什么?

最佳答案

问题不就是您试图将模板分成 .h 和 .cpp (实际上,这在当前标准中很少可行)吗?

template <int INSTANCE>
class mailbox
{
public:
    void write(uint32_t v){
        if (INSTANCE == 0)
            access(reg_0, v);
        else
            access(reg_1, v);
    }
}

应该可以

关于c++ - 如何将类成员专门化为多个模板值(常量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074377/

相关文章:

c++ - 非托管 C++ 代码的代码度量分析

c++ - 在逗号上使用多参数模板类型扼流圈的 Boost Fusion 结构

带有映射声明的 C++ 模板参数

c++ - 将仿函数作为 C++ 模板参数传递

c++ - 模板特化 : Is not a Template

c++ - bool 表达式作为模板参数

c++ - 如何为 std::unique_ptr 创建一个有效的 C++ 别名模板

c++ - 空指针和应用程序崩溃

c++ - 类模板特化可以利用非特化实现吗?

c++ - 如何编写一个接受具有相同接口(interface)的不同类型参数的函数?