C++17提供了if constexpr,可以根据后面的条件进行选择式的编译:
#include <iostream>
using namespace std;
template<class T>
T doF(T t1, T t2)
{
if constexpr (is_same<T, int>::value)
{
return t1 + t2;
}
else
{
return t1 - t2;
}
}
int main() {
auto d1 = doF(1, 2);
cout<<d1<<endl;
auto d2 = doF(8.8, 1.1);
cout<<d2<<endl;
return 0;
}
运行程序输出:
3
7.7
可以看到根据T的类型,doF有选择的完成了加法和减法两种逻辑。
由于要决定的是编译逻辑,因此if constexpr求值的不能是运行时值,而是需要编译时值。
基于这种条件式编译,可以完成编译器的递归:
#include <iostream>
using na