浅谈:C++中cpp 14 ~ cpp 17
2026/6/3 21:30:12 网站建设 项目流程

cpp 14 ~ cpp 17

对于每次写std::is_integral<T>::valuestd::enable_if<B>::type都比较麻烦。

因此 cpp 14 建议可以通过另一个简单的符号表示该内容。也就是type trait variable templates的概念。

直到 cpp 17 才在正式标准中进行了全面的完善。

// cpp14 template< bool B, class T = void > using enable_if_t = typename enable_if<B,T>::type; // cpp17 template< class T >

因此我们可以得到以下的简洁版本。

#include <iostream> #include <type_traits> #include <vector> namespace my { template <typename Type> class vector { public: vector(size_t len, Type val) { std::cout << "vector(size_t len, Type val)" << std::endl; } /**

cpp 20

c++ 是一门不断发展的现代语言,在 cpp 20 中提出了概念和约束到标准中。

requires是一个关键字。可以直接在模板函数中进行使用。

requires是在template和函数体之间编写,提升可代码可阅读性。

注意一点,requires 子句需要是一个初等表达式 或者 带括号的表达式。

#include <concepts> #include <iostream> #include <type_traits> #include <vector> namespace my { template <typename Type> class vector { public: vector(size_t len, Type val) { std::cout << "vector(size_t len, Type val)" << std::endl; } // 使用 requires 关键字 // 直接写出约束条件 template <typename Iter> requires (!std::is_integral_v<Iter>) vector(Iter begin, Iter end) { std::cout << "vector(Iter begin, Iter end)" << std::endl; } }; } // namespace my

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询