C++17新特性-使用constexpr-if简化编译

简介

模板化编程中,通常要以不同的方式做某些事情,比如特化模板类型。C++17带了constexpr-if 表达式,可以在很多情况下简化代码。
How to do it…
本节中,我们会实现一个很小的辅助模板类。它能处理不同模板类型的特化,因为它可以在完全不同的代码中,选取 相应的片段,依据这些片段的类型对模板进行特化:
1.完成代码中的通用部分。在我们的例子中,它是一个简单的类,它的成员函数add ,支持对U 类型值与T 类型值的加法:

template  class addable
{
T val; public:
addable(T v) : val{v} {} template 
T add(U x) const { return val + x;
}
};

2.假设类型T 是std::vector ,而类型U 是int 。这里就有问题了,为整个vector 添加整数是为了什么呢?其应该是对vector 中的每个元素加上一个整型数。实现这个功能就需要在循环中进行:

template  T add(U x)
{
auto copy (val); // Get a copy of the vector member for (auto &n : copy) {
n += x;
}
return copy;
}

3.下一步也是最后一步,将两种方式结合在一起。如果T 类型是一个vector ,其每个元素都是U 类型,择进行循环。如果不是,则进行普通的加法:

template <

你可能感兴趣的:(C++17新特性,c++,开发语言,算法)