c++17相关内容

C++17 中的通用工厂机制

我想为一组派生类实现一个通用工厂机制,它不仅可以通用地实现工厂函数来创建该类的对象,还可以实现其他模板类的创建者,这些模板类的模板参数之一派生类. 理想情况下,解决方案将仅使用 C++17 功能(无依赖关系). 考虑这个例子 #include #include #include 结构富{虚拟〜Foo()=默认值;虚空你好()= 0;};结构 Fo ..
发布时间:2022-01-24 16:49:08 C/C++开发

策略类设计,但没有使整个用户类成为模板

考虑以下代码,其中 Writer_I 充当接口.其他符合以正确形式编写元素类型的约定的类可以从它派生.这里,printf 和流被选为策略,Calculator 作为用户. 该接口以某种方式存储在 Calculator 中,而 write_i 隐藏了模板的所有丑陋细节,以便类成员函数保持干净.大多数事情在编译时仍然是已知的,并且可以内联. 我知道这是基于虚拟 + 派生的多态性的经典案例, ..
发布时间:2022-01-24 16:44:00 C/C++开发

如何使用 C++ 概念(“concepts lite")支持构建 gcc?

C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展".N4377 是最新版本文档.为了包含在 C++ 标准中,要求实现功能,理想情况下是可公开访问的系统. 我知道 concept-gcc 但上面的概念提案(俗称Concepts Lite)是不同的.我听说有一个概念分支,我尝试了 的 origin/asutton/c++-conceptsgcc 的 g ..
发布时间:2022-01-23 21:08:11 C/C++开发

c++17 `filesystem` 不是命名空间名称

我想知道为什么在下面的代码中,没有找到命名空间filesystem: g++ -std=c++17 main.cpp -lstdc++ //#include 命名空间 fs = std::filesystem;主函数(){返回0;} 错误: main.cpp:3:21: error: ‘filesystem’ is not ..
发布时间:2022-01-23 20:43:33 C/C++开发

C++17:元组解包时只保留一些成员

假设您需要调用以下方法: std::tuple 在 C++17 中,您可以在一行中调用函数并将元组解包: auto [a, b, c] = foo(); 现在,我怎样才能继续只存储 b 和 c 并丢弃 a? 目前,我只知道两个选项: 1 - 我可以在自动解包时使用虚拟变量 但是,虚拟变量将未被使用,并且会发出警告,所以如果我想忽略该警告,代码将非常不愉快: #pragm ..
发布时间:2022-01-20 08:06:43 C/C++开发

使用 std::get、std::tuple_size、std::tuple_element 对元组的组件求和

我有一个自定义类,它有一个类似元组的接口.因为我希望我的代码尽可能通用,所以我认为将我的算法基于函数 std::get、std::tuple_size, std::tuple_element 所以你只需要专门化这些函数来使用我的算法.让我们将需要这些函数特化的概念称为 Tuple. 现在我正在尝试总结 Tuple 的组成部分.函数声明应该是这样的: 模板int sum_compo ..
发布时间:2022-01-20 00:09:59 C/C++开发

在 switch 语句中使用字符串——我们在 C++17 中的立场是什么?

我们每个人(可能)都有儿时写作的梦想: switch(my_std_string) {案例“foo":do_stuff();休息;case "bar": do_other_stuff();休息;默认值:just_give_up();} 但这是不可能的,正如过去(2009 年)对这个问题的回答中所解释的那样: 为什么switch语句不能应用于字符串? 从那时起,我们见证了 C++11 ..
发布时间:2022-01-19 10:52:29 C/C++开发

函数属性是否继承?

如果我有一个带有 属性的虚函数 [[nodiscard]] virtual bool some_function() = 0; 该属性是否会隐式应用于该函数的覆盖? bool some_function() 覆盖; 或者我需要再次使用该属性吗? [[nodiscard]] bool some_function() override; 解决方案 我在 C++17 的措辞中看不到任何证据 ..
发布时间:2022-01-13 18:32:52 C/C++开发

找不到标头`execution`和`std::reduce`

我正在尝试编译此代码段 #include #include #include 双倍结果 = std::reduce(std::execution::par, v.begin(), v.end()); 我尝试了这些编译器: Apple LLVM 版本 8.1.0 (clang-802.0.42)clang 版本 3.8.0-2ubuntu4 (tags/RELE ..
发布时间:2022-01-11 16:54:24 C/C++开发