c++17相关内容

C++ 标准的哪一部分阻止显式指定此模板的参数?

在我的 C++ 旅行中,我遇到了以下习语(例如 此处 in Abseil) 用于确保模板化函数不能显式指定模板参数,因此它们不是有保证的 API 的一部分并且可以自由更改而不会破坏任何人: template void AcceptSomeReference(const T&); 它似乎确实有效: foo.cc:5:3: 错误:没有匹配的函数调用“AcceptSomeReference"Acc ..
发布时间:2021-09-16 18:58:35 C/C++开发

减轻头文件中的长限制

我在头文件中定义了一个 inline 函数对象,如下所示: //fmap.hpp命名空间 util {内联自动 constexpr fmap = boost::hana::curry(boost::hana::flip(boost::hana::transform));} 客户端代码可以简单地#include "fmap.hpp" 并开始使用 util::fmap. 到目前为止一切顺利. ..
发布时间:2021-09-15 19:37:43 C/C++开发

在 C++17 中编译的 constexpr 从 int 到 unscoped enum 的未定义行为与非固定基础类型编译

这是constexpr 静态转换的未定义行为从 int 到作用域枚举在 C++17 中编译为非固定基础类型(作用域 枚举的相同问题).TLDR 是作用域枚举始终具有固定的基础类型(默认情况下为 int,因此您始终可以从 int 转换为作用域枚举). 我想知道以下内容是否应该在 C++17 中编译 enum E{甲、乙};constexpr Ex = static_cast(2); 这在 ..
发布时间:2021-09-13 20:42:03 C/C++开发

std::any 用于无法复制构造的对象

我有一个包含 unique_ptr 的对象,因此如果不进行深度复制(我不想要),就无法复制构造. 我想让 std::any 持有那个对象,但我发现的唯一替代方法是让 std::any 持有一个指针,这会增加一个无用的间接,或者让我的对象有一个唯一的点.下面的代码有望说明我的观点: //用clang++编译-std=c++2a;叮当版 5.0.0#include #include #incl ..
发布时间:2021-09-04 20:40:40 C/C++开发

在 switch case 中避免默认值的优雅方法(使用枚举类)

我有一个枚举类,例如: 枚举类状态{S1,S2,S3,S4}; 每当我进行可能使用此类的 switch/case 语句时,我都希望避免使用“默认"语句.不惜一切代价强迫我为所有可能的情况写一份声明.这个想法是,如果我在这个枚举中添加一个新案例“S5",由于缺少默认值,编译器将在每次切换时向我发送警告,因为并非所有案例都被涵盖.通过这样做,我最终不会忘记这个新状态可能需要实现特定行为的地方. ..
发布时间:2021-09-03 18:38:57 C/C++开发

访问 std::variant 中的公共结构成员

我无法理解如何在 C++17 中使用 std::variant.给定两个结构体 A 和 B,以及一个 std::vector>vs,我想: 引用一个通用的结构体成员,例如n; 调用一个通用函数,例如fun() 或 add(). #include #include #include 结构体{国际n;void fun() { std::cout ..
发布时间:2021-08-31 19:08:08 C/C++开发

何时使用 std::invoke 而不是简单地调用可调用对象?

据我所知,std::invoke 允许我执行以下操作: std::invoke(f, arg1, arg2, ...); 有没有比简单地做更有利的场景: f(arg1, arg2, ...); 解决方案 如果 invocable 是指向成员函数的指针,那么您需要执行以下操作之一: (arg1->*f)(arg2,...);(arg1.*f)(arg2,...); 取决于 arg1 是 ..
发布时间:2021-08-30 18:56:26 C/C++开发

变换无视 sf::Sprite 的起源

在 SFML 中转换精灵,不考虑它的新来源. 在我的例子中,sf::Sprite 围绕左上角 ({0,0}) 的轴旋转,不管它的原点是什么.之前使用 .setOrigin() 设置新原点无效. 我确信精灵更早地获得了正确的原点位置,即矩形的中心. 我的代码: 在我的每个 Card 类构造函数中,我都设置了我的精灵的原点. card_sprite.setOrigin(Car ..
发布时间:2021-07-23 19:47:37 C/C++开发

mingw64 + sublime 3 输入输出文件不起作用

我正在尝试为竞争性编程建立一个环境.我已经成功安装了带有 sublime 3 的 mingw 64.我的代码能够在控制台中打印 hello world.但是,我无法将输入和输出读入输入和输出文件.我正在按照此处的说明进行操作,并且这是我试图运行的 C++ 代码. #include使用命名空间标准;int main(){#ifndef ONLINE_JUDGEfreopen(“input.txt" ..
发布时间:2021-07-23 19:35:22 C/C++开发

为什么使用 std::forward而不是 static_cast<T&>

当给定以下结构的代码时 template void foo(Args&&... args) { ... } 我经常看到库代码在函数内使用 static_cast 进行参数转发.通常,这样做的理由是使用 static_cast 避免了不必要的模板实例化. 给定语言的参考折叠和模板推导规则.我们通过 static_cast 获得了完美的转发,此声明的证明如下(在误差范围内,我希 ..
发布时间:2021-07-14 18:32:25 C/C++开发

如何实现通用开关/大小写,该开关/大小写也可以在常规C ++类型上运行并且在语法上相似?

在C/C ++中, switch/case 仅将整数类型与编译时间常数进行比较.不能使用它们将用户/库定义的类型(如 std :: string )与运行时值进行比较.为什么switch语句不能应用于字符串? 我们是否可以实现相似的 switch/case ,它给出类似的语法糖,并避免普通的 if/else 比较. struct X {std :: string s;布尔运算符==(co ..
发布时间:2021-04-23 19:52:58 C/C++开发

指向成员变量的指针作为静态成员

这些天,我一直在研究一个数据模型的项目研究,该模型具有一种适合我的需求的反映.当我使用最新的稳定版g ++进行我的第一篇研究时,我在Visual Studio 19中失败了.太糟糕了,因为后者是我的主要平台…… 有效地,我尝试将指向成员变量的指针存储到另一个静态成员变量中.因此,对我来说,真正进行此内联(以适应我的更大概念)确实很理想. 我将失败的细节简化为以下MCVE: stru ..
发布时间:2021-04-22 19:53:29 C/C++开发