Вы сконфигурировали Реестр схемы для поиска брокера Kafka на kafka:9092
, но вы также настроили брокера Kafka для объявления его адреса как localhost:9092
.
Я не знаком конкретно с Kubernetes, но в этой статье описывается, как обрабатывать сетевые конфигурации в принципе при использовании контейнеров, IaaS и т. Д.
Ясность всегда бьется умный. Сделайте то, что можно считать позже.
Вы не являетесь одними в размышлении, что стандартный код является немного тупым. Следующий стандарт C++ представит функции лямбды, таким образом, можно будет написать более четкий код со стандартными алгоритмами.
Первое так же читаемо и удобно в сопровождении как второе - если Вы знаете что bind
делает. Я работал с Повышением:: Свяжите (чрезвычайно идентичный std::tr1::bind
) достаточно долго то, что я не испытываю затруднений из-за него.
После того как TR1 становится частью официального стандарта, можно безопасно предположить, что любой компетентный программист на C++ поймет это. До тех пор это могло представлять некоторую трудность, но я всегда думаю о долгосрочном по краткосрочному.
Я говорю, идут для 2)
Для улучшения производительности Вы могли добраться m.end()
из цикла и резерва пространство в векторе.
Не могу ждать C++ 0x и основанное на диапазоне для цикла; это сделало бы Ваш цикл еще лучше.
Вы забыли using namespace std::tr1::placeholders
:P
Честно говоря, для простых алгоритмов как это последний код, вероятно, легче поддержать. Но я на самом деле склоняюсь для первого (особенно, когда C++ 1x дает нам лямбды!), потому что это подчеркивает функциональный стиль программирования, которое я лично предпочитаю обязательному стилю использования цикла.
Это - действительно другая вещь штрихов; стандартные алгоритмы являются самыми полезными, когда они или сложны или универсальны, и это не ни один.
Вот то, на что это будет похоже с лямбдами:
std::transform(m.begin(), m.end(), std::back_insterter(v),
[](MyMap::value_type pair){ return pair.first; }
);
И на самом деле, существует другой подход, который я предпочел бы, но для его многословия:
using std::tr1::bind;
using std::tr1::placeholders::_1;
std::for_each(m.begin(), m.end(),
bind(&std::vector<int>::push_back, v,
bind(&MyMap::value_type::first, _1)
)
);
И с лямбдами (это является, вероятно, в общем и целом самым опрятным и самым явным из всех опций):
std::for_each(m.begin(), m.end(),
[&v](MyMap::value_type pair){v.push_back(pair.first);}
);
Пойдите с опцией № 1, посмотрите Scott Meyers, Эффективный Объект STL № 43, страница 181.
Когда я вчера посмотрел на Ваш вопрос, это не было связывание (который я использую много), который вынудил меня посмотреть дважды для понимания кода, но карты:: value_type:: сначала, который у меня не было случая для использования очень часто. Пока я соглашаюсь, что "Ясность всегда бьется умный", знакомство требуется, прежде чем ясность и Вы не собираетесь знакомиться со стилями, которые Вы не используете...
Я также сказал бы, что, в то время как опция 2 более ясна с точки зрения понимания намеченной цели, это скрыло бы ошибку более легко (любая ошибка в опции 1, более вероятно, будет видима во время компиляции).