假设我有一个函数模板,比如说:
当然,这段代码不能编译,因为“T == SpecialType”无效。那么我该如何以优雅的方式编写它?
template<typename T>
func(T a, T b, ...) {
...
for (const auto &single : group) {
...
auto c = GivenFunc1(a, b, single, ...);
... }
...
}
然而,如果T是一个特殊类型,比如“SpecialType”,我希望用“GivenFunc2”计算c而不是“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”无效。那么我该如何以优雅的方式编写它?