Bon*_*ero 0 c++ c++-concepts c++20
想象一下我有一个可调用的模板参数“Fn fn”。现在我想检查它的返回类型是否是有符号标量。我如何使用 C++20 概念做到这一点?
要检查是否可以调用它并返回某个类别的内容,只需调用它并检查表达式即可。毕竟,这就是概念,一种用于编写常规 C++ 代码并检查其某些属性的工具。
template<typename T>
concept signed_scalar = std::signed_integral<T> || std::floating_point<T>;
template<typename Fn, typename... Args>
concept signed_result = requires(Fn fn, Args... args) {
{ fn(args...) } -> signed_scalar;
};
Run Code Online (Sandbox Code Playgroud)
这是唯一通用的方法,因为重载在任何 C++ 程序中总是可能的,包括函子的operator().
您还可以花哨地使用它std::invoke来代替裸函数调用表达式,以处理更多“可调用”类型。但你没有表明这是一个要求。