C++概念是否允许我的类在声明/定义中指定它满足某些概念?

Do C++ Concepts allow for my class at declaration/definition to specify it satisfies certain concept?

本文关键字:定义 满足 许我的 是否 我的 C++ 声明      更新时间:2023-10-16

目前我能想到的最好的方法是使用static_assert,但我更喜欢更好的方法。

#include <set>
#include <forward_list>
using namespace std;
template<typename C>
concept bool SizedContainer = requires (C c){
c.begin();
c.end();
{c.size()} -> size_t;
};
static_assert(SizedContainer<std::set<int>>);
static_assert(!SizedContainer<std::forward_list<int>>);
static_assert(!SizedContainer<float>);
class MyContainer{
public:
void begin(){};
void end(){};
size_t size(){return 42;}; 
};
static_assert(SizedContainer<MyContainer>);

int main()
{
}

目前没有,您要查找的关键字是requires从 cpp 首选项

关键字requires有两种使用方式:1) 引入 requires-clause,指定对模板参数的约束或 在函数声明上。

由于您不处理函数声明,因此这无关紧要。 第二种情况是

开始一个 requires-expression,它是类型的 prvalue 表达式 bool 描述某些模板参数的约束。这样 如果满足相应的概念,则表达式为真,并且 否则为假:

这在这里又不相关,因为您没有尝试验证某些模板参数的约束