我想知道在基于策略的设计中配置策略的最佳实践是什么。策略的接口由其宿主类定义。然而,没有定义如何实现这个接口。因此,策略可能需要不同的配置参数。但我只想将一个配置(对象)提供给宿主类。以下代码是我目前所做的一个草稿,但我对它不太满意,因为它不保证不存在命名冲突,也不封装不同策略的配置成员。
class Policy1 {
template<class Config>
Policy1(Config cp1) {
/* Use policy1 config members */
}
};
class Policy2 {
template<class Config>
Policy2(Config cp2) {
/* Use policy2 config members */
}
};
template <class P1, class P2>
class Host {
template<class Config>
Host(Config c) : p1(P1(c)), p2(P2(c)) {...}
P1 p1;
P2 p2;
};
struct Config {
int configParam1; /* Used by policy 1 */
int configParam2; /* Used by policy 2 but might also
be called configParam1
*/
}
int main() {
Host<Policy1, Policy2> h(Config());
return 0;
}
如何防止配置对象中的名称冲突?是否有一些类似于命名空间的机制?或者是否有更好的想法来配置我的策略?