void f(/*неважно*/, bool flag)
{
// много кода…
// очень много кода…
// общего для обоих случаев кода…if (flag) /*частный случай 1*/; else/*частный случай 2*/;
// ещё очень много кода…
}
void g(/*пофигу*/)
{
// много кода для частного случая 1
}
void g(tag_t, /*пофигу*/)
{
// много другого кода для случая 2
// который совсем не похож на код случая 1
}
Опять же, overload разрешится при компиляции, а флаг — только в рантайме.
C>void f(/*неважно*/, bool flag)
C>{
C> // много кода…
C> // очень много кода…
C> // общего для обоих случаев кода…
C> if (flag) /*частный случай 1*/; else/*частный случай 2*/;
C> // ещё очень много кода…
C>}
C>void g(/*пофигу*/)
C>{
C> // много кода для частного случая 1
C>}
C>void g(tag_t, /*пофигу*/)
C>{
C> // много другого кода для случая 2
C> // который совсем не похож на код случая 1
C>}
C>
C>Опять же, overload разрешится при компиляции, а флаг — только в рантайме.
Т.е. я так понял, что можно ориентироваться по степени сходства кода ?
А в чём может проявляется преимущество тагов ? Я что-то не могу придумать случай, когда нужен выбор в компайл тайм ?
Здравствуйте, Sergey J. A., Вы писали:
C>>Опять же, overload разрешится при компиляции, а флаг — только в рантайме.
SJA>Т.е. я так понял, что можно ориентироваться по степени сходства кода ? SJA>А в чём может проявляется преимущество тагов ? Я что-то не могу придумать случай, когда нужен выбор в компайл тайм ?
Если функция вызывается много раз в большом цикле, то многократная проверка флага понизит быстродействие.
Здравствуйте, Михаил Трухманов, Вы писали:
МТ>Так если проверка нужна в compile-time, можно с тем же успехом дать функциям разные имена, сделав при этом одинаковые параметры, правда ведь?
Здравствуйте, Sergey J. A., Вы писали:
SJA>С конструкторами это не прокатывает
Блин, читал ветку четыре дня назад -- на конструктор в примере не обратил особого внимания. А сегодня ответил на конкретное сообщение про "функцию", и облажался.
А по теме, думаю, единственное, когда это надо --- если хочется обязательно в compile-time выбрать. Причем, для твоего примера, похоже, почти всегда уже при компиляции можно определится, копировать или нет.
Вопрос только, надо ли связываться с тегом при первой же возможности.
Можно это делать ради быстродействия (сомневаюсь, что выигрыш будет заметен).
Можно просто из идеологических соображений (все что можно сделать при компиляции, не надо откладывать до run-time).
Но мне кажется, на идеологию можно "положить", чтобы код проще был --- пусть компилятор оптимизирует.
Это все конечно не относится к случаю, когда кода очень много и он совсем отличается.