Вот проблема с чистотой кода, о которой вы захотите знать.Скажем, пользователь вводит опцию.Итак, у вас есть некоторая переменная Number x
, которая может быть One
или Two
.Если вы хотите позвонить foo()
, вам нужно будет сделать ...
if (x == One)
foo<const char *, One>("asd");
else
foo<const char *, Two>("asd");
, где, как если бы вы использовали альтернативный способ (ваше предложение номер два), вы могли бы просто сделать:
foo<const char *>("asd", x);
Теперь, если в этой функции было бы очень полезно оптимизировать эти возможные ветви, тогда точно.Но в остальном, я думаю, вы просто усложняете себе жизнь.
Кроме того, чем эти методы отличаются.В коде, который я написал выше, я ссылался на три разные функции.В последнем, где есть только один параметр шаблона, код, сгенерированный для этой функции, будет включать оба пути кода, когда num == One
и когда num == Two
.Однако первые два шаблонных метода смогут удалить эти ветви.Он может сделать это, потому что он построит два разных пути кода в памяти, по одному для каждого случая.