问题标签 [c++20]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 什么是“跨度”,我应该什么时候使用?
最近我收到了span<T>
在我的代码中使用 's 的建议,或者在使用 's 的网站上看到了一些答案span
- 据说是某种容器。但是 - 我在 C++17 标准库中找不到类似的东西。
那么这是什么神秘span<T>
的,如果它是非标准的,为什么(或何时)使用它是一个好主意?
c++ - 命名空间(可以是一个/满足一个)概念吗?
我知道 C++ 概念提案的目的可能是对模板参数(例如,作为“序列”)施加限制,在当前情况下,无论设法编译什么都足够好(并且错误消息非常糟糕) )。
但是 - 名称空间呢?我的意思是,目前,我们不能将它们用作模板参数,但有人会认为,如果一个方法只使用静态方法和类的成员,那么命名空间也应该是一个令人满意的传递给它。概念提案的当前版本/当前实施是否支持这一点?如果没有,这是否被考虑并拒绝或只是不考虑?
相关问题:
c++ - 推动 Hana Concepts 的实施
Boost Hana 似乎没有记录图书馆的这一方面,所以我想知道我在做什么至少是合法的。
我已经开始在我的代码中添加一堆概念,我不得不使用一些 hana 概念。有一个例子:
像这样为 Boost Hana Functor 概念制作“别名”可以吗?或者它可以随时改变?
顺便说一句,错误并不十分精确。可能是因为 Hana 使用的是 C++14 并且不能使用概念。但是有没有计划有一天升级到 C++20?
c++ - C++ 概念循环
我想要求编译器检查一个元组是否只包含“元类型”。
顺便说一句,我对 C++ 概念完全陌生。
所以我想确保序列中的每个类型(我们只说这个例子的 Iterable )都是“元类型”。
如果它可以简化代码,我正在使用 Boost Hana。
目前我什至不确定这是否可能。我希望是的,我想我只需要学习更多元编程的东西。所以我会继续搜索和尝试,但如果有人已经有了答案,谢谢!
c++ - 在通用 C++ 代码中移动基于范围的循环?
想象一下,你有这个通用的伪代码:
我们想要处理对可迭代对象1的右值和左值引用,其想法是该函数处理容器逐个元素地执行操作。
我们希望将容器的参考规范转发给元素是合理的。换句话说,如果iterable
是一个右值引用,该函数将不得不从容器中移动元素。
使用 C++17,我会做
显然,这不是维护2的最佳代码,容易出错并且可能不太容易为编译器优化。
我的问题是:对于未来的 C++ 标准,是否有可能引入转发基于范围的循环的概念?如果这个就好了
可以将el作为右值引用处理。这样,这将是可能的:
我担心破坏代码的更改,但同时我无法考虑在不移动对象的情况下将右值引用作为基于范围的循环的参数传递的情况。
正如建议的那样,我试图写下我将如何更改标准的 6.5.4 部分。可以在这个地址阅读草稿。
您认为可以在不引入严重问题的情况下引入此功能吗?
1使用 C++20 概念或 static_asserts 检查
2如果没有 C++17,情况会更糟
c++ - 我可以执行获取我的 `std::future` 并等待它吗?
所以你可以创建一个在被调用std::future
之前不起作用的:.get()
您还可以编写一个std::future
可等待的,并且可以通过任何线程中的代码随时准备好:
如果你打电话f_deferred.wait_for(1ms)
,它不会打扰等待。如果你调用f_deferred.get()
,你选择的一个 lambda (在这种情况下,一个打印的"I ran\n"
执行。
如果您调用f_waitable.get()
,则管理任务的代码无法知道有人在等待未来。但如果你打电话f_deferred.wait(1ms);
,你会future_status::deferred
立即得到。
有什么办法可以将这两者结合起来吗?
一个具体的用例是当人们排队任务时线程池返回期货。如果未排队的未来是.get()
'd,我想使用被阻塞的线程来执行任务,而不是让它空闲。另一方面,我希望拥有返回期货的人能够确定任务是否完成,甚至等待有限的时间来完成任务。(如果您正在等待,我可以在您等待期间您的线程处于空闲状态)
如果做不到这一点,在即将到来的提案中是否有比让我的线程池返回具有所有限制的未来更好的解决方案?我听说期货没有未来,期货解决的问题存在更好的解决方案。
c++ - 函数概念返回类型(必须是bool)
此页面http://en.cppreference.com/w/cpp/language/constraints表明函数概念的返回类型必须是 bool。如果这里只有一个选项,那么首先需要指定返回类型的理由是什么?
为什么不直接使用这样的语法:
c++ - 如何使用概念表达“模板 T 是...”形式的条件?
很容易表达“类型 T 是 E 的容器”之类的东西:
(具体检查的内容并不那么重要)。
现在我需要表达这样一个条件:“对于任何类型的 E,T 都是一个容器”。
这种情况下怎么写is_container
?
c++ - if constexpr 和 requires-expression 用于临时概念检查
假设,给定 C++17if constexpr
和 Concepts TS(例如,在最近的 gcc 版本中),我们想检查模板函数中的类型是否具有嵌套类型:
概念文档很少,所以我可能弄错了,但似乎就是这样(现场示例在Wandbox上)。
doSmth
现在让我们考虑取消注释另一个调用时会发生什么。期望 requires 子句的计算结果为 似乎是合理的false
,并且将采用 the 的else
分支if constexpr
。与此相反,gcc 使这是一个硬错误:
这是 gcc 中的错误,还是预期的行为?