【发布时间】:2017-10-12 23:11:58
【问题描述】:
我正在处理a C++ program 中的以下难以调试的代码。我对 C++ 很陌生,但我认为这可能是转换为模板的好选择。但是,我很难理解它会是什么样子以及如何调用新函数。我还会有多个 load_func 函数,然后只调用具有指定显式类型的模板函数吗?或者是否可以将所有 8 个函数替换为单个函数模板?哪种方法会更好?我相信第一种方法需要对其他文件的修改最少,而第二种方法需要我更新对这些函数的所有调用以明确指定类型。
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 load_slow_path 是一个使用非静态成员变量的成员函数。另外我认为我遗漏的代码也使用了成员变量。您在链接中查看它
标签: c++ class templates macros member-functions