C++20:多种类型的概念及其约束,正确的语法?

标签 c++ templates c++20 c++-concepts

确认在即将发布的c++20标准中,根据this reddit report来自最近Cologne ISO C++ Meeting ,我们将能够指定模板的concept对于每个类/函数模板,我们将能够设置 constraints关于它的类型。但是,在文档和教程(例如 here )中,我找不到多类型用例的正确语法。


假设我们有一个多类型的概念:

template<typename T1, typename T2>
concept AreEqComparable = requires(T1 a, T2 b) {
    { a == b } -> bool;
};

假设我想在两种不同类型之间定义一个简单的比较函数。 我该怎么做? 更具体地说,我应该在下面代码的 ??? 部分写什么:

???
bool are_equal(T1 a, T2 b) { return a == b; }

我在 here 中找不到任何关于此案例的引用资料。 , here , 甚至 here .我随机尝试了类似的东西:

/* 1 */ template<AreEqComparable T1, T2>
/* 2 */ AreEqComparable<T1, T2>
/* 3 */ template<AreEqComparable<T1, T2>>

但它们都抛出语法错误。我认为答案应该在规范中的某处P0557Bjarne Stroustrup ,但我快速浏览后无法找到它。

最佳答案

你可以这样写:

template <typename T1, typename T2>
    requires AreEqComparable<T1, T2>
bool are_equal(T1 a, T2 b)
{
    // ...
}

这里,我们使用 requires-clause 对类型模板参数施加要求。

关于C++20:多种类型的概念及其约束,正确的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980155/

相关文章:

c++ - 等待 DBus 服务在 Qt 中可用

c++ - 为任何其他任意函数计时并返回其结果的函数

c++ - struct std::iterator_traits<...> 中没有名为 ‘pointer’ 的类型

c++ - 我可以有多个 GL_ARRAY_BUFFER 缓冲区吗?

c++ - 没有对多个基类中的模板化成员函数进行访问或歧义检查

c++ - 是否可以使用不同 ABI 的外部库构建应用程序

c++ - 带有 std::map::const_iterator 的模板化类中的嵌套结构?

c++ - 特殊化构造函数,需要可能的引用类型

c++ - 为契约(Contract)指定违规处理程序

c++ - 函数模板接受并返回不同的 lambda