小编Max*_*ler的帖子

如何定义任意 std::vector 满足的概念?

我想要一个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
}
Run Code Online (Sandbox Code Playgroud)

这样我们就会有如下内容:

class A {
std::vector<int> vec() { /* ... */}
}

class B {
std::vector<double> vec() { /* ... */}
}

static_assert(HasVector<A>);
static_assert(HasVector<B>);
Run Code Online (Sandbox Code Playgroud)

此外,要求一个向量作为返回类型会更好,其值类型满足其他一些概念,即


template<typename T>
concept Arithmetic = // as in the standard

template<typename T>
concept HasArithmeticVector = requires (T t ) {
    { T. vec() } -> …
Run Code Online (Sandbox Code Playgroud)

c++ templates vector c++-concepts c++20

12
推荐指数
2
解决办法
1117
查看次数

C++20 模板模板概念语法

有了概念,C++20提供了很好的语法,比如

template<typename T>
concept SomeConcept = true; // stuff here


template<typename T>
requires SomeConcept<T>
class Foo;

template<SomeConcept T>
class Foo;

Run Code Online (Sandbox Code Playgroud)

其中限制类的两种概念方式是等效的,但后者更简洁。

如果我现在有一些模板模板概念,例如

template<template<typename> typename T>
concept SomeOtherConcept = true; // stuff here

template<template<typename> typename T>
requires SomeOtherConcept<T>
class Foo;
Run Code Online (Sandbox Code Playgroud)

我不知道没有要求子句的非详细(简洁/简短)语法,例如

template<template<typename> SomeotherConcept T>
class Foo;

template<template<SomeOtherConcept> typename T>
class Foo;
Run Code Online (Sandbox Code Playgroud)

没有用,所以

声明这样一个模板模板类的正确语法是什么,对模板模板参数有概念限制?

c++ templates c++-concepts c++20

7
推荐指数
1
解决办法
120
查看次数

标签 统计

c++ ×2

c++-concepts ×2

c++20 ×2

templates ×2

vector ×1