gpt4 book ai didi

c++ - 如何将概念应用于成员变量

转载 作者:太空狗 更新时间:2023-10-29 22:56:40 24 4
gpt4 key购买 nike

我目前正在编写我的第一个概念。编译器是使用 -fconcepts 调用的 g++ 7.2。我的概念是这样的:

template <typename stack_t>
concept bool Stack() {
return requires(stack_t p_stack, size_t p_i) {
{ p_stack[p_i] };
};
};

template <typename environment_t>
concept bool Environment() {
return requires(environment_t p_env) {
{ p_env.stack }
};
};

如您所见,Environment 应该有一个名为 stack 的成员。该成员应与 Stack 概念相匹配。如何向环境添加这样的要求?

最佳答案

我使用 gcc 6.3.0 和 -fconcepts 选项测试了这个解决方案。

#include <iostream>
#include <vector>

template <typename stack_t>
concept bool Stack() {
return requires(stack_t p_stack, size_t p_i) {
{ p_stack[p_i] };
};
};

template <typename environment_t>
concept bool Environment() {
return requires(environment_t p_env) {
{ p_env.stack } -> Stack; //here
};
};

struct GoodType
{
std::vector<int> stack;
};

struct BadType
{
int stack;
};

template<Environment E>
void test(E){}

int main()
{
GoodType a;
test(a); //compiles fine

BadType b;
test(b); //comment this line, otherwise build fails due to constraints not satisfied

return 0;
}

关于c++ - 如何将概念应用于成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47251676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com