【发布时间】:2019-11-20 15:19:58
【问题描述】:
确认在即将发布的c++20标准中,根据最近的Cologne ISO C++ Meeting中的this reddit report,我们将能够指定模板的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>>
但它们都抛出语法错误。我认为答案应该在 Bjarne Stroustrup 的规范 P0557 中的某个地方,但我快速浏览后无法找到它。
【问题讨论】:
-
我没用过概念但是你试过
template<AreEqComparable T1, AreEqComparable T2>吗?另外IsEqComparable可能是一个更好的名称(因为它只适用于一个参数)。 -
@Galik 刚才试过了,不行。
标签: c++ templates c++20 c++-concepts