【发布时间】:2021-05-20 02:49:34
【问题描述】:
我正在尝试使用模板,并且遇到了类似这样的代码。调用模板化方法并显式传递结构作为模板参数的代码。该结构包含有关如何使用输入类型的所有特定逻辑。
我想知道这是否是使用 C++ 模板的有效方式,或者这是一团糟,应该通过类继承来完成?我找不到像这样使用模板的任何示例,所以我觉得有更好的方法
// Template parameter that holds all the logic for a specific input type
// Similar structs would exist for double, string, etc. In my code these would be classes not primitives
struct HowToHandleIntType {
using Type = int;
struct Add {
int Run(int a, int b) { return a+b; }
};
struct Remove {
void PreRemove(int a) {
// Do Something to a
}
bool Run(int a) {
// Do Something to a
}
}
};
// Generic methods that call into the template struct for all real logic
template <typename HowToHandle>
int add(typename HowToHandle::Type a, typename HowToHandle::Type b) {
return HowToHandle::Add::Run(a, b);
}
template <typename HowToHandle>
bool remove(typename HowToHandle::Type a) {
HowToHandle::Remove::PreRemove(a);
return HowToHandle::Remove::Run(a);
}
// This is how the methods would be used
add<HowToHandleIntType>(5, 8);
add<HowToHandleDoubleType>(5.0, 8.0);
remove<HowToHandleStringType>("bob");
【问题讨论】:
-
这听起来很像基于策略的设计。不过,可能会有更好的设计。
-
谢谢,基于策略的设计看起来确实很相似。在基于策略的设计中,模板参数似乎用于以某种方式修改类。在我的情况下,我没有类,只有一个操作列表,如添加、删除等,用户可以使用它们,只要它们传入正确的
HowToHandlestruct
标签: c++ templates template-meta-programming