Как использовать повышение:: mpl для создания политик?

Да, просто удалите конкретный узел из начального списка на всех узлах и либо выполните повторный перезапуск, либо вызовите nodetool reloadseeds (если у вас есть версия Cassandra с этой подкомандой - я не помню, в какой версии это было введено ...)

6
задан xian 4 October 2009 в 13:31
поделиться

3 ответа

Так как никто не ответил на вопрос удовлетворительно, я потратил когда-то, роя в повышение:: источник mpl. Человек, это не симпатично со слоями макросов и сотнями строк классов специализации. У меня теперь есть больше оценки для авторов библиотек повышения для создания метапрограммирования легче и более портативным для нас. Надо надеяться, C++ 0x сделает жизнь писателей библиотеки легче также.

Так или иначе решение оказывается простым и изящным.

Первый iter_fold не то, что я хочу, поскольку я не мог выяснить, как указать итератор, который может быть deferenced к пустому типу. Таким образом, я возился со сгибом, и найдите следующее:

typedef fold<Policies, Null, Cons<_1, _2> >::type MyPolicy;

Для этого для работы я должен обеспечить Пустой тип и специализацию для Недостатков:

struct Null { };

template<class PolicyT>
struct Cons<Null, PolicyT> {
  static void init() { PolicyT::init(); }
  static void cleanup() { PolicyT::cleanup(); }
};
9
ответ дан 9 December 2019 в 22:41
поделиться

Я думаю, что Вы ищете что-то как:

typedef 
  iter_fold<
    Policies,
    begin<Policies>::type,
    Cons<_1,_2>
  >::type
  MyType;

Вы также могли бы хотеть изучить inherit_linearly <> если Вы buld-в своего рода CRTP для вызова функций основы, соединенных проводами во время компиляции.

1
ответ дан 9 December 2019 в 22:41
поделиться

Я думаю, что Вашей проблемой является довольно вызов во время выполнения, чем метафункции, потому что Вы хотите вызвать init функции на фактических объектах периода выполнения.

Вы могли попробовать алгоритмы во время выполнения mpl, как:

for_each<Policies>(InitPolicy());

с

struct InitPolicy() {
    template<class Policy>
    void operator() (Policy& p) { p.init_options(); }
};
1
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: