Конфигурация классов политики

Интересно, что является лучшей практикой для настройки политик в дизайне на основе политик. Интерфейс политики определяется ее классом хоста. Тем не менее, не определено, как этот интерфейс должен быть реализован. Поэтому политикам могут потребоваться другие параметры конфигурации. Но я хочу передать только одну конфигурацию (объект) в класс хоста. Следующий код представляет собой черновик того, что я сделал до сих пор, но я не очень доволен им, потому что он не гарантирует отсутствие конфликтов имен и не инкапсулирует элементы конфигурации различных политик.

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;
}

Как я могу предотвратить конфликт имен в объектах конфигурации? Есть ли какой-то механизм, похожий на пространства имен? Или как-то лучше настроить мои политики?

0 ответов

Другие вопросы по тегам