【发布时间】:2018-08-19 09:16:51
【问题描述】:
假设我有一个函数模板,比如说
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”无效。那么如何优雅地写呢?
【问题讨论】: