【发布时间】:2019-10-30 12:53:55
【问题描述】:
考虑一个模拟关联缓存的类:
template <size_t S, size_t L, size_t W>
class AssociativeCache {
size_t which_set(size_t index) { return index % (L * W); }
// ...
};
这里,关键缓存参数S、L和W是编译时非类型模板参数。
也可以像这样实现一个类似的类:
class AssociativeCacheDynamic {
size_t S, L, L;
size_t which_set(size_t index) { return index % (L * W); }
// ...
};
这里的关键参数与其他情况相同,但存储为类的成员变量。
除了在动态情况下设置缓存参数值的构造函数外,两个类的每个方法的实现也基本相同,即源代码逐字节相同1支持>。
如果我想要 both 这两个类,我怎样才能以最少的代码重复和尽可能少的 grotty 宏或多个包含 hack 来实现它们?
如果解决方案允许您有一些差异,则加分:例如,模板方法可能使用std::array 存储,而动态方法可能使用std::vector。
1虽然编译后的代码通常会完全不同(因为在动态情况下代码不是专门针对固定值的)。
【问题讨论】:
标签: c++ templates code-reuse code-duplication