c++17相关内容
我想为一组派生类实现一个通用工厂机制,它不仅可以通用地实现工厂函数来创建该类的对象,还可以实现其他模板类的创建者,这些模板类的模板参数之一派生类. 理想情况下,解决方案将仅使用 C++17 功能(无依赖关系). 考虑这个例子 #include #include #include 结构富{虚拟〜Foo()=默认值;虚空你好()= 0;};结构 Fo
..
考虑以下代码,其中 Writer_I 充当接口.其他符合以正确形式编写元素类型的约定的类可以从它派生.这里,printf 和流被选为策略,Calculator 作为用户. 该接口以某种方式存储在 Calculator 中,而 write_i 隐藏了模板的所有丑陋细节,以便类成员函数保持干净.大多数事情在编译时仍然是已知的,并且可以内联. 我知道这是基于虚拟 + 派生的多态性的经典案例,
..
C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展".N4377 是最新版本文档.为了包含在 C++ 标准中,要求实现功能,理想情况下是可公开访问的系统. 我知道 concept-gcc 但上面的概念提案(俗称Concepts Lite)是不同的.我听说有一个概念分支,我尝试了 的 origin/asutton/c++-conceptsgcc 的 g
..
std::optional 在 C++ 17 中,之前是 std::experimental::optional. 我尝试使用以下命令编译包含 的文件: g++ -std=c++17 .cpp (在 Bash 终端中).我收到以下错误: .cpp:5:20 致命错误:可选:没有这样的文件或目录#include ^编译终止 但我可以 #include
..
我想知道为什么在下面的代码中,没有找到命名空间filesystem: g++ -std=c++17 main.cpp -lstdc++ //#include 命名空间 fs = std::filesystem;主函数(){返回0;} 错误: main.cpp:3:21: error: ‘filesystem’ is not
..
..
我正在学习本教程: http://www.bfilipek.com/2017/08/cpp17-details-filesystem.html 签出新的 c++ filesystem 功能.但是我无法在我的机器上编译最小的例子: #include #include #include 命名空间 fs = std::filesystem;主
..
假设您需要调用以下方法: std::tuple 在 C++17 中,您可以在一行中调用函数并将元组解包: auto [a, b, c] = foo(); 现在,我怎样才能继续只存储 b 和 c 并丢弃 a? 目前,我只知道两个选项: 1 - 我可以在自动解包时使用虚拟变量 但是,虚拟变量将未被使用,并且会发出警告,所以如果我想忽略该警告,代码将非常不愉快: #pragm
..
我有一个自定义类,它有一个类似元组的接口.因为我希望我的代码尽可能通用,所以我认为将我的算法基于函数 std::get、std::tuple_size, std::tuple_element 所以你只需要专门化这些函数来使用我的算法.让我们将需要这些函数特化的概念称为 Tuple. 现在我正在尝试总结 Tuple 的组成部分.函数声明应该是这样的: 模板int sum_compo
..
考虑以下代码: #include #include 模板结构 custom_wrapper{模板custom_wrapper(Arg arg): 数据(arg) {}T数据;};模板custom_wrapper(Arg arg) ->custom_wrapper;模板结构 custom
..
很多人使用 C++17/boost 变体的模式看起来与 switch 语句非常相似.例如:(来自 cppreference.com 的片段) std::variantv = ...;标准::访问(重载{[](auto arg) { std::cout
..
我们每个人(可能)都有儿时写作的梦想: switch(my_std_string) {案例“foo":do_stuff();休息;case "bar": do_other_stuff();休息;默认值:just_give_up();} 但这是不可能的,正如过去(2009 年)对这个问题的回答中所解释的那样: 为什么switch语句不能应用于字符串? 从那时起,我们见证了 C++11
..
如果我有一个带有 属性的虚函数 [[nodiscard]] virtual bool some_function() = 0; 该属性是否会隐式应用于该函数的覆盖? bool some_function() 覆盖; 或者我需要再次使用该属性吗? [[nodiscard]] bool some_function() override; 解决方案 我在 C++17 的措辞中看不到任何证据
..
我有一个 std::variant 我想将其转换为另一个具有其类型超集的 std::variant.有没有一种方法可以让我简单地将一个分配给另一个? 模板ToVariant ConvertVariant(const FromVariant& from) {ToVariant to = std::visit([](
..
当我尝试使用 std::filesystem::path 作为函数参数时,它在我的机器上出现了段错误.这是一个最小的例子: #include 无效的东西(const std::filesystem::path& p){返回;}int main() {事情(“测试");返回0;} 此代码段导致 gdb 的以下回溯: #0 0x0000563a5a3814b3 in std::vec
..
为了使用:std::filesystem 来自 C++17 库,我的项目从 vs2015 迁移到 vs2017. 我的项目编译和运行没有错误,包含的库没有错误,但是当尝试使用 std::filesystem 时,我得到以下信息: 似乎没有包含该库,但看不出为什么? 编辑: Microsoft Visual Studio Enterprise 2017VisualStudio.1
..
使用以下代码,我得到一个编译错误 C2065 'a': undeclared identifier(使用 Visual Studio 2017): [] {自动 [a, b] = [] {返回 std::make_tuple(1, 2);}();auto r = [&] {return a;}();//错误C2065}(); 但是,以下代码编译: [] {整数a,b;std::tie(a,
..
我们正在尝试在 C++17 及其 更改为 std::uncaught_exception 下测试一些代码.我似乎无法让 GCC 提供 __cplusplus 的值: $/opt/local/bin/g++ -std=c++17 -dM -E -
..
我正在尝试编译此代码段 #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
..
我有一堂课: 类 Symbol_t {上市:Symbol_t( const char* rawName ) {memcpy(m_V, rawName, 6 * sizeof(char));};string_view strVw() const {返回字符串视图(m_V,6);};私人的:字符 m_V[6];};//类 Symbol_t 还有一个我无法修改的 lib-func: extern
..