Предположим, у меня есть шаблон функции, например
template<typename T>
func(T a, T b, ...) {
...
for (const auto &single : group) {
...
auto c = GivenFunc1(a, b, single, ...);
... }
...
}
Однако, если T является особым типом, скажем, "SpecialType", я хочу, чтобы c
был рассчитан с помощью "GivenFunc2", а не "GivenFunc1". Тем не менее, я бы не хотел писать специализацию для "SpecialType", так как будет большое дублирование кода. Поэтому я хочу, чтобы функция шаблона была чем-то вроде
template<typename T>
func(T a, T b, ...) {
...
for (const auto &single : group) {
...
auto c = (T == SpecialType) ? GivenFunc2(a, b, single, ...)
: GivenFunc1(a, b, single, ...);
... }
...
}
Конечно, этот код не компилируется, так как "T == SpecialType" недействителен. Итак, как мне написать его элегантным способом?