【发布时间】:2016-03-07 20:44:33
【问题描述】:
我正在尝试编写一个包含几个非常相似的虚拟方法的基类,我希望使用模板来减少重复:
class CPU {
template<typename T>
T getRegister(unsigned int which) {
/** Returns value of specified register.
*/
return *(T*)this->getRegisters()[which].data;
};
virtual int16_t getRegister(unsigned int which);
virtual uint16_t getRegister(unsigned int which);
virtual int32_t getRegister(unsigned int which);
virtual uint32_t getRegister(unsigned int which);
//etc...
};
class Z80: public CPU: { ... };
Z80 myCPU;
printf("Register 0 = 0x%04X\n", myCPU.getRegister<uint16_t>(0));
目标是让各个 CPU 能够定义自己的 getRegister() 或使用在 CPU 基类中定义的那个。
如果可能的话,我不确定正确的语法是什么?
与我找到的大多数答案不同的关键点:
- 类本身不是模板
- 方法是虚拟的
【问题讨论】:
-
你不能有(虚拟)重载,唯一的区别是返回类型。
-
不同名字怎么办?我可以在不重复实现的情况下提供 getRegister
() 或 getRegister_uint32_t() 吗?
标签: c++ class templates template-specialization virtual-functions