以下代码尝试根据参数包中传递的最后一个参数做出编译时决策。 它包含一个比较,如果参数包 arguments 的数量 > 0,然后尝试获取它的最后一个元素。 但是,构造的元组是在一个无效索引处访问的,该索引应该大于最大元组索引(如static_assert所示)。 如果我做cnt-1那怎么可能? ...
以下代码尝试根据参数包中传递的最后一个参数做出编译时决策。 它包含一个比较,如果参数包 arguments 的数量 > 0,然后尝试获取它的最后一个元素。 但是,构造的元组是在一个无效索引处访问的,该索引应该大于最大元组索引(如static_assert所示)。 如果我做cnt-1那怎么可能? ...
我试图了解 if constexpr 的效用,并想知道以这种方式使用它是否有任何效用。 这个 function 是否通过使用 if constexpr 而不是常规的 if 而改变了? 我假设性能是一样的。 我对模板的理解是 if 语句的结果在编译时已经知道,所以没有区别。 ...
我基本上想在编译时 select 分支之一,但无法弄清楚如何解决出现的错误。 这是代码(链接) : 错误信息:cannot convert 'std::wostream' {aka 'std::basic_ostream<wchar_t>'} to 'std::basic_ostream ...
设置我定义了两个模板类ContainerA和ContainerB ,如下所示 以及另一个 class,源自上述: 到目前为止效果很好首先,我想初始化一个std::tuple ,即持有上述每个类的一个 object : 接下来,我希望能够在编译时评估 if 语句。 据我所知,这可以通过if cons ...
我有一个可以从空结构或具有某些成员的结构继承的类,具体取决于bool 。 使用相同的bool ,我添加了一个if constexpr块来访问基类的成员,但是我得到一个编译器错误 为什么这不起作用,我应该如何解决? ...
我有一个解析 function,我想根据是否设置长度选项进行分支。 如果设置了长度选项,function 应该始终检查减少的长度是否等于 0。如果不是,它只检查 null 终止。 基于这个小细节,我不想重写我的整个 function,所以这就是我想出的: 神栓让我烦恼的是,我总是必须使用长度选项 ...
我正在努力将 C++ 17 项目降级到 C++ 14。我找到了以下代码: 它使用if constexpr检查类型并相应地返回类型名称。 如果没有类型匹配,它会调用一个使用static_assert的模板函数get_assertion_message 。 我正在考虑根据我之前的问题在这里应用解决 ...
我正在将一个用 C++ 17 编写的项目降级到 C++ 14。降级时,我遇到了一段涉及if constexpr的代码,我希望将其转换为 C++ 14(据我所知, if constexpr是 C++ 17 功能)。 Boost 的is_detected用于检查给定类型是否具有星号运算符或 get ...
假设存在以下代码: class Foo { public: void foo() const { std::cout << "foo" << std::endl; } }; class Bar { public: void bar() const { s ...
可以检测类型是否完整https://devblogs.microsoft.com/oldnewthing/20190710-00/?p=102678 如果一个类型是完整的,我有理由想要提供一个不同的(可内联的)实现。 模板化的 function 在基于 function 中的if constexp ...
我在包含std::array<std::byte, 20>的结构中的operator<=>的高性能实现中使用 2 x std::uint64_t和 1 x std::uint32_t 。 我正在尝试使其与交叉编译器和体系结构兼容。 作为其中的一部分,我试图彻底拒绝任何std ...
为了防止编译器将std::vector<T>应用于std::cout << u之类的语句,我想做这样的事情: 有什么办法可以做到这一点? 编辑(澄清)我正在研究类似 printf 的 function,它也可以打印 POD 的字符串和向量以及字符串(及其向量)。 我想将此功 ...
我正在尝试使用自省设计的模板化用户定义转换。 在 C++20 中,我可以执行以下操作: 即,如果PFMeta<T>::from_cursor(const struct PFCursor&)则使用它,否则执行 memcpy。 (godbolt 中的更长示例: https://go ...
问题我需要将 integer m的所有可能分区生成到j个元素a_k的总和中,其中每个a_k可以是-1 、 0或1 。 这是一种确定性算法,因此它应该能够在编译时实现它。 我想返回一个std::array所有可能的组合作为constexpr 。 我的算法简单明了,一共有3^j种组合。 所以我们遍历所 ...
考虑这两个例子示例 1 示例 2 我知道这两个示例在概念上是相同的,但考虑到这些功能位于SomethingFactory.hpp文件中,而我的main.cpp包含它。 在main.cpp中,我可能只创建了Something1类型,而不知道存在其他Something类型。 我真的很关心我的可执行文件的 ...
假设我有一个 function 有两个参数,其中第一个参数是动态的,但第二个参数在编译时总是已知的:uint8_t convert_bcd(uint8_t num, uint8_t mask) { uint8_t result = mask & 0x0F & num; ...
我有一个功能,如: 我如何匹配具有不同大小的 wchar_t 数组,例如: 很快 ? ...
所以我知道你可以使用 enable_if 来禁用函数模板(例如,如果类型不是整数) - 但是你可以用 constexpr 做同样的事情吗? 即是否有这样的等价物: template<class T, typename = std::enable_if_t<std::is_integra ...
我有一长串if constexpr语句,如果它们都不成功,我想触发一个编译时错误。 具体来说,我有一个抽象语法树,我想将其结果转换为我可能需要的一组特定类型。 我有 AsInt()、AsDouble() 等在工作,但我需要能够根据提供的类型更动态地执行此操作。 目前,我已经编写了一个模板化的 As ...