这个问题来源于 模板中的类型条件
这个问题非常相似,但原始问题并没有得到完全回答。
#include "stdafx.h"
#include <type_traits>
class AA {
public:
double a;
double Plus(AA &b) {
return a + b.a;
}
};
template<class T> double doit(T &t) {
if (std::is_same<T, AA>::value)
return t.Plus(t);
else
return t + t;
}
int _tmain(int argc, _TCHAR* argv[])
{
double a;
AA aa;
doit(a);
doit(aa);
return 0;
}
这段代码无法编译,我也没有期望它能够编译。但是,有没有可能根据模板值来选择性地编译某些代码而不编译其他代码呢?在这里,类型“double”没有名为“Plus”的方法,类“AA”也没有重载“+”运算符。考虑到操作的微妙语义,运算符重载并不总是可取的,因此我正在寻找一种替代方案。我更喜欢使用#ifdef(在引用的问题中提出的真正条件编译),但是基于模板值。