【发布时间】:2020-01-23 19:23:49
【问题描述】:
我一直在查看 C++ reference 上的概念库,但找不到算术类型的概念。我在p0898 中也找不到它。我认为这样的概念会很有帮助。 想做的事:
template <typename T>
T some_function(T arg) requires std::integral<T> || std::floating_point<T>
{ /* functions body */ }
我可以这样做:
template <std::arithmetic T>
T some_function(T arg)
{ /* functions body */ }
我显然可以自己定义它,这并不难(例如template <typename T> concept arithmetic = std::integral<T> || std::floating_point<T>;),但在我看来,这样的基本概念应该在标准库中定义。它不存在有什么好的理由吗?或者有没有建议添加?
【问题讨论】:
-
似乎是一个疏忽,因为
std::is_arithmetic存在。您可以使用它来编写自己的概念。 -
通过这种思维方式,我们可以说我们不需要任何概念,因为在
标头中定义的大多数概念在 中都有它们的integral_constant 版本,有些甚至是使用它们实现的。但是integral_constant和一个概念是完全不同的东西,integral_constant不能作为模板参数列表中的概念。 -
加上定义算术概念
std::is_arithmetic_v而不是概念std::integral和std:floating_point将导致编译器不将这些概念视为算术概念的更受约束的版本。描述于C++ reference -
抱歉编辑,这是一个错误。某事某事,概念应该有自己的案例,某事某事。
标签: c++ c++-standard-library c++20 c++-concepts