Конфигурация классов политики
Интересно, что является лучшей практикой для настройки политик в дизайне на основе политик. Интерфейс политики определяется ее классом хоста. Тем не менее, не определено, как этот интерфейс должен быть реализован. Поэтому политикам могут потребоваться другие параметры конфигурации. Но я хочу передать только одну конфигурацию (объект) в класс хоста. Следующий код представляет собой черновик того, что я сделал до сих пор, но я не очень доволен им, потому что он не гарантирует отсутствие конфликтов имен и не инкапсулирует элементы конфигурации различных политик.
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;
}
Как я могу предотвратить конфликт имен в объектах конфигурации? Есть ли какой-то механизм, похожий на пространства имен? Или как-то лучше настроить мои политики?