【发布时间】:2021-10-01 22:29:43
【问题描述】:
我想要一个concept 需要一个任意向量作为返回类型:
template<typename T>
concept HasVector = requires (T t) {
{ T.vec() } -> std::same_as<std::vector<int>>; //works
{ T.vec() } -> std::same_as<std::vector<foo>>; //want to put something arbitrary in here
}
这样我们就会有如下内容:
class A {
std::vector<int> vec() { /* ... */}
}
class B {
std::vector<double> vec() { /* ... */}
}
static_assert(HasVector<A>);
static_assert(HasVector<B>);
此外,如果需要一个向量作为返回类型,其值类型满足其他一些概念,那就更好了,即
template<typename T>
concept Arithmetic = // as in the standard
template<typename T>
concept HasArithmeticVector = requires (T t ) {
{ T. vec() } -> std::same_as<std::vector<Arithmetic>>;
有没有办法把它放在概念名称中?
【问题讨论】:
-
如果只有
template<typename T, concept C=Anything> concept HasVector = requires可以存在。
标签: c++ templates vector c++20 c++-concepts