概念定义中的多个模板参数
multiple template parameters in concept definition
我有一个具有多个模板参数的概念
template<typename T, typename U> EqualityComparable
我可以在
template< EqualityComparable T /* and U */ > void foo() {}
不知何故?
例如,请考虑此代码段
template <typename T, typename U>
concept EqualityComparable = requires(T a, U b) {
{a == b} -> bool;
{a != b} -> bool;
};
template<EqualityComparable T /* and U */>
void foo (T,U) {} //can i make this work?
int main () {
foo(1.0f,1);
}
godbolt上的clang实验概念编译器告诉我
template<EqualityComparable T /* and U */> void foo(T,U) {}
--> error: concept 'EqualityComparable' requires more than 1 template argument; provide the remaining arguments explicitly to use it here
所以这似乎表明这是可能的吗?
我认为这应该有效:
template<class T>
void foo_works(T, EqualityComparable<T> auto);
或等效:
template<class T, EqualityComparable<T> U>
void foo_works(T,U);
它将具有预期的效果,但正如它所写的那样,它并没有反映平等可比概念的对称性。
因此,一些编码人员可能更喜欢对对称约束使用非缩写语法:
template<class T,class U>
requires EqualityComparable<T,U>
void foo_works(T,U);
对于 TS 概念,存在这种可能性:
EqualityComparable{T,U}
void foo_works(T,U);
但这种语法吓坏了保守派。
这是一种可能性
template<typename A, typename B> requires EqualityComparable<T,U>
void foo_works(T,U) {}
但我想知道它是否直接在template<>
中起作用
相关文章:
- 如何使用宏根据参数定义不同的数据类型?
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 如何通过opencv中的程序参数定义特征类型?
- 确定是否有针对特定类型的参数定义的超载函数
- C 试图使用函数参数定义2D数组
- 是否可以为模板模板参数定义别名
- C++11:用容器参数定义函数(类似于基于范围的)
- C++-用类参数定义矢量大小
- 使用void* 参数定义纯虚函数的抽象基类.派生类匹配参数是指向某种类型的指针
- 如果我使用非常量参数定义那些,我是否仍然会获得默认的复制构造函数和运算符 =
- 使用参数定义的打印方法名称
- 如何根据类参数定义成员类运算符
- 如何为引用参数定义模板函数,为指针参数定义相同的函数
- boost::函数参数定义不起作用
- 如何基于不同的参数定义相同的宏函数
- 如何基于不同的参数定义相同的宏函数
- 将参数定义为未指定的模板类型
- C++模板,vector.size用于默认参数定义
- 如何为CamShift的矩形输入参数定义矩形变量