c++20相关内容
如何使类方法成为协程?这里有一个小例子。在这里,我试图从类方法创建协程,但编译器抛出以下错误: 错误:找不到此协程的承诺类型 52|std::载体vec=co_aWait等待函数1(); 如何正确设置方法的协程特征_特征? auto awaitable_func1() { struct Awaitable { std::vector
..
C++20显式支持std::contiguous_iterator_tag。一些STL算法(例如std::copy)可以在连续迭代器上执行得更好。但是,我不清楚程序员应该如何访问此新功能。 为了便于讨论,我们假设我们有一个完全符合C++20的库实现。我想编写尽可能最简单的连续迭代器。 Here's my first attempt. #include cl
..
根据official documentation,Clang 13通过使用-fmodules命令行参数支持C++20模块。 我甚至无法在基于Intel或M1的Mac上使用Clang 13(MacOS蒙特雷)编译基本模块。 假定文件module.cpp的文本内容如下: export module a; export int f(int a, int b) { return
..
我正在学习概念,我想不出约束非类型模板参数的值(非类型)的方法。 Example编译的代码,尽管我希望它不会(由于失败的要求): #include enum Bla{ Lol, Haha }; template requires requires{ // my guess is that this just checks
..
尝试创建constexprstd::string和std::vector对象时遇到奇怪的编译器错误: #include #include int main() { constexpr std::string cs{ "hello" }; constexpr std::vector cv{ 1, 2, 3 }; return 0;
..
假设我有一个类/结构模板及其构造函数的显式推导指南。让这个类有两个模板参数,其中一个可以通过演绎指南推导,另一个不能。 template struct Foo { template Foo(F&&) { } }; template using alias = T;
..
在C++20之前的问题Access index in range-for loop (answer)中提到 2020注意:使用基于lambda的解决方案可能比使用宏诡计更明智。 有人能发布基于lambda的C++20解决方案吗?C++20还有其他新的解决方案吗? 编辑:我有一个主循环,它在向量的大小上是多态的。由于我必须经常阅读和修改这段代码,我认为我有理由希望得到最好的解决方案
..
我正在学习C++概念,我有一个讨厌的问题: 我不知道如何区分成员变量是int类型的变量和成员变量是int&类型。 原因是我正在使用的检查使用的是instance.ember语法,而在C++中,它返回一个引用。 完整示例: #include #include template void print(T t)
..
std::initializer_list和有什么区别?两者都是某种类型的值的连续序列。这两家公司都没有所有权。 那么,我们什么时候使用第一个,什么时候使用后者? 推荐答案 简而言之,std::initializer_list用于创建新区域,用于初始化。而std::span用于引用现有范围,以获得更好的接口。 std::initializer_list是一种语言
..
我正在尝试实现一个委托类型,该类型将与泛型回调一起使用,并在存在重载集的情况下工作。 为简化起见,此处摘录了类,并将绑定方法实现为静态函数以简化问题。 template class Delegate; template struct Delegate
..
是否已定义概念,用于在C++20或Range-TS中指定特定类型的范围? 类似: template concept RangeOf = requires(T&& t) { requires std::same_as
..
In my question我收到了适合我的答复,但我不知道它是如何工作的。 尤其是,我不明白delete关键字和概念是如何删除operator
..
我在一个基于CMAKE的项目中使用clang 13.0.0,CMAKE_CXX_STANDARD被定义为20。以下代码导致编译错误(命名空间‘std’中没有名为‘u8string’的类型): #include #include int main() { #ifdef __cpp_char8_t std::u8string sss = u8"a
..
我一直在使用C++20协程,我偶然发现了thislambda捕获的生命周期不会延长到协程的整个生命周期的问题。 我想知道什么是安全捕获的,因为我必须将所有捕获复制到如下所示的新对象中: [a1=object]() -> task { // need to copy into a new object to safely reference for the lifet
..
我希望有接受任何固定类型容器的函数。例如,将同时接受std::array和std::array的函数。 我原以为使用Range可以做到这一点,但我意识到我的理解相当肤浅。 是否可以在没有模板的情况下实现? 编辑:我们是否可以使用范围库来定义一个类型,该范围库将执行与SPAN相同的操作,但将用于非连续容器?也许我的问题表达得不对,我的意思可能是视
..
我正在尝试实现数字文字运算符模板。 #include #include #include #include #include #include using namespace boost
..
如何将此问题link中的要求转换为概念 我尝试了以下操作: template concept MyConditions = ( U::value_type && Tin::value_type && Tout::value_type
..
using T = decltype(std::same_as) 我已经在VS2019上试过了。结果是T = bool。 这是由标准定义的,还是仅由特定编译器定义的属性? 我还没有找到关于这件事的任何官方消息。 https://en.cppreference.com/w/cpp/concepts 推荐答案 AConcept-idLikestd::same
..
尝试回答问题How to use enqueu, dequeue, push, and peek in a Palindrome?时,我建议使用std::stringstd::string查找回文: bool isPalindrome(const std::string str) { return std::equal(str.begin(), str.end(), str.rbeg
..
在重构项目以与模块一起使用之前,我编写了一个测试项目ExImMod,以查看是否可以像模块文档中所宣传的那样分离声明和定义。对于我的项目,我需要将声明和定义保存在单独的翻译单元(TU)中,根据模块文档,这也是可能的。我不想使用模块分区。 遗憾的是,我的测试ExImMod项目表明它们不能完全分开,至少对于Visual Studio 2022(STD:C++LATEST)编译器(VS22)是这样。
..