>> const header_t header = request.header();
>> const int status = header.statusCode();
Согласен, это еще лучше, но реализовывать такое я бы стал точно так же.
>> — Также, помоему вы немного не верно толкуете идиому trait.
>> Сверьтесь с сылками отсюда: en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Traits
Я был в этих ссылках.
Да, классические traits зависят от типа, а не от константы, но суть от этого не меняется — вычисление типа (типов) на этапе компиляции.
Если сделать это в run-time, то тип придется приводить ручками, а это нехорошо.
А как это сделать с помощью mpl?
COM вообще не из C++, это двоичный стандарт. Удобнее всего с ним работать из VB или Jscript через Automation, как мне кажется.
А в C++ для работы с ним есть ATL.
Вполне корректная, я считаю. Доля прочего кода при одних и тех же данных постоянна, меняется лишь время сравнения. Точное отношение скоростей сравнения проверка не даст, но выявить победителя позволит точно.
И потом, где еще используется такое массовое сравнение? Обычно при сортировке и поиске.
Времена 10 000 000 сравнений, с:
0.168, 0.232, 0.233
Что подтверждает.
Проверил.
Классический способ быстрее, как и ожидалось, время около 2.8с. «Хороший» и «безумный» способы примерно равноценны, время около 3.7с, но «безумный» обычно быстрее на 0.01с.
От количества полей (2, 3, 4) зависит незначительно.
Структура из интов, размер массива 10 000 000 элементов, сортировка std::sort, данные в каждом подходе одинаковые, компилятор VS2008, Release.
но по сути у вас пока только кучка специализаций заменена на
mpl::map
кстати, это
я бы все равно заменил на макрос с говорящим названием, чтобы было нагляднее тому, кто будет добавлять новые константы
далее для того, чтобы привязать метод к константе, скорее всего придется совать в этот map структуры вроде
num_getter
>> const int status = header.statusCode();
Согласен, это еще лучше, но реализовывать такое я бы стал точно так же.
>> — Также, помоему вы немного не верно толкуете идиому trait.
>> Сверьтесь с сылками отсюда: en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Traits
Я был в этих ссылках.
Да, классические traits зависят от типа, а не от константы, но суть от этого не меняется — вычисление типа (типов) на этапе компиляции.
Если сделать это в run-time, то тип придется приводить ручками, а это нехорошо.
А как это сделать с помощью mpl?
А в C++ для работы с ним есть ATL.
data a = { 1, 2, 3, 4 } ;
И потом, где еще используется такое массовое сравнение? Обычно при сортировке и поиске.
Времена 10 000 000 сравнений, с:
0.168, 0.232, 0.233
Что подтверждает.
Классический способ быстрее, как и ожидалось, время около 2.8с. «Хороший» и «безумный» способы примерно равноценны, время около 3.7с, но «безумный» обычно быстрее на 0.01с.
От количества полей (2, 3, 4) зависит незначительно.
Структура из интов, размер массива 10 000 000 элементов, сортировка std::sort, данные в каждом подходе одинаковые, компилятор VS2008, Release.