我正在處理a C++ program中的以下難以調試的代碼。我對C++很陌生,但我認爲這可能是轉換爲模板的好選擇。但是,我很難理解這將會是什麼樣子,以及如何調用這些新功能。我是否仍然有多個load_func函數,然後用指定的顯式類型調用模板函數?或者這些功能中的所有8個功能都可以用一個功能模板來代替?哪種方法會更好?我相信第一種方法需要對其他文件進行最少的修改,而第二種方法則需要我更新對這些函數的所有調用以明確指定類型。將宏定義的函數轉換爲C++中的模板
class mmu_t
{
public:
//...
// template for functions that load an aligned value from memory
#define load_func(type) \
inline type##_t load_##type(reg_t addr) { \
// ... Other code elided for clarity
type##_t res; \
load_slow_path(addr, sizeof(type##_t), (uint8_t*)&res); \
return res; \
}
// load value from memory at aligned address; zero extend to register width
load_func(uint8)
load_func(uint16)
load_func(uint32)
load_func(uint64)
// load value from memory at aligned address; sign extend to register width
load_func(int8)
load_func(int16)
load_func(int32)
load_func(int64)
}
也許這只是簡單化,但如果函數根本不使用'this',它們應該被標記爲'static'。 (如果一個類的所有成員都是'static',它不應該是一個類。) – aschepler
@aschepler load_slow_path是一個使用非靜態成員變量的成員函數。另外我認爲我遺漏的代碼也使用成員變量。您可以在鏈接 –