我試圖寫一個基類,它包含幾個非常類似的虛擬方法,我希望使用模板來減少重複的虛擬方法:C++:模板有不同的返回類型
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
基類中定義的那個。
我不確定究竟是什麼正確的語法是使這項工作,如果它甚至可能?
是不同於大部分的答案我發現要點:
- 類本身不是一個模板
- 的方法是虛擬
你不能有(虛擬)重載,唯一不同的是返回類型。 – Jarod42
用不同的名字怎麼樣?我可以提供getRegister()或getRegister_uint32_t()而不重複執行嗎? –
Rena