我想专门化模板类的成员方法。该模板类有一个 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/