确认在即将发布的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>>
但它们都抛出语法错误。我认为答案应该在规范中的某处P0557由 Bjarne 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/