我正在尝试编写一个向量包装器( indexed_vec ),它存储类型为 ValueType 的对象,但其他数据结构(其他类型的向量)通过索引引用这些对象(因为迭代器显然不稳定)。 因此,当 ValueType 的对象在indexed_vec中被删除时,必须进行一些内务处理以使其他数据结构中的索引保 ...
我正在尝试编写一个向量包装器( indexed_vec ),它存储类型为 ValueType 的对象,但其他数据结构(其他类型的向量)通过索引引用这些对象(因为迭代器显然不稳定)。 因此,当 ValueType 的对象在indexed_vec中被删除时,必须进行一些内务处理以使其他数据结构中的索引保 ...
我希望我的 class 对象的构造函数接受一个能够转换为std::packaged_task<R()>的仿函数,而 R 是从仿函数的返回值自动推导出来的。 这是我到目前为止所得到的: 演示 即使我提供了演绎指南,我天真的方法也行不通。 我怀疑它与指定std::convertible_t ...
我有一个派生的 class, Wrapper ,它继承自模板定义的基类 class。我想配置Wrapper ,以便如果基类 class 具有构造函数参数, Wrapper的构造函数还包括基类的构造函数参数,以便它可以将它们转发给基础 class 构造函数:struct Base1 { Base1 ...
我想制作一个带有模板参数的 class 和一个返回 class 实例的 function(也带有模板参数)。 但是,对于较短的代码,我想在返回 class 构造的结果时省略模板参数。 我不知道如何称呼这种技术以及是否可能。 为了更好地描述我的问题,下面的代码是我理想中寻找的示例。template & ...
我从std::tuple派生,但由于 class 模板参数推导问题,无法从初始化列表构造派生的 class。 有没有更好的方法来构造这样一个 class 除了先给它一个已经构造好的元组first{ std::tuple{1, 1.0f, 1u} }; . ...
当我有一个带向量的类对象时,比较以下情况。 非推导参数 T 可以用默认模板参数很好地替换: 对于我的课程来说情况并非如此,它有点复杂( CompilerExplorer ): 这失败并出现以下错误: 但是当我在容器的实例化中(在 main 中)补充模板专业化obj<0>时,它 ...
这是我正在尝试但似乎不起作用的东西:我想根据类对象的实例化方式来切换编译时开关。 如果只有一个构造函数参数,则LengthOpt应等于false ,否则为true (我的实现有更多构造函数,其中开关应默认为true 。 我试图创建一个演绎指南,但如果模板参数没有显示为构造函数参数(这是一个真正的沮 ...
我正在阅读 C++17 中的演绎指南。假设我们有以下示例: 我的问题是,显式推导指南的显式声明(如上所示)是否会禁用2 个隐式推导指南(对应于 class 模板Person的 2 个 ctors)的形成,如果我们没有指定显式推导指南,它们就会存在扣除指南。 我的意思是,假设在上面的例子中,没有显式推 ...
此代码有效,无需指定构造函数: 如果我将 Foo 设为模板,则它不起作用。 它说扣除失败/提供了 2 个 arguments,而预期有 1 个。 如果我添加一个像Foo(T1, T2){}这样的构造函数,那么它就可以工作。 我想,这种结构默认情况下只适用于结构。 我怎么了? 编辑:我正在使用 Cla ...
为什么以下 CTAD 尝试编译失败? 我原以为会推导出构造函数 C(int) 。 ...
考虑以下代码:template <typename B> struct D : B { }; D d{[]{ }}; gcc 12.x 接受它并按预期推断d是D</* type of lambda */> 。 clang 14.x 拒绝它并出现以下错误: godb ...
我有一个模板 class 但只能从构造函数中推断出模板 arguments 的一部分。 有没有办法在调用构造函数时在尖括号内提供模板 arguments 的 rest ? 假设我们使用的是 C++17。 据我所知,我们需要在尖括号中提供所有模板 arguments,或者不提供任何模板并使用 CTAD ...
在 C++20 中,如果应用别名模板,则可以具有隐式推导指南。 然后,我构建了一个简单的模板别名,它是ints :template <std::size_t N> using ints = std::array<int, N>; 但:ints{1, 2, 3, 4} 不起 ...
我有很多类型可以使用比较函子,我想看看是否有办法在不传递参数的情况下简化它。 这是一个虚拟代码示例: 不幸的是,这不起作用https://godbolt.org/z/q56c3coaT 。 但是我想知道 c++17 std::less 是如何工作的,或者有什么办法可以做到? ...
C++17 中 CTAD(类模板参数推导)鲜为人知的特性:可以将用户定义的推导指南标记为explicit 。 (神箭。 ) 因此,class 模板A和B具有明显不同的行为。 我想编写一个单元测试,让static_assert表明我的一个模板的行为像B ,而不像A 。 这在 C++17 和/或 C ...
我试图通过选择 class 构造函数来推断布尔模板参数。 一个简单的例子: 这甚至可能还是必须在构造函数上明确指定 Condition ? PS:条件不依赖A。 ...
以下程序 由 GCC 编译,仅对声明符周围的冗余括号发出警告。 但是,Clang 给出了声明的硬错误错误:用推导的 class 模板特化类型声明变量时不能使用括号这是一个非常具体的错误(例如S<int> (s);编译),所以我想这是故意的,但我找不到说这是格式错误的措辞。 像dcl.dc ...
假设我们有这个模板用于一个结构和一个相同大小的字节数组的联合template<typename T> union point { struct { T x, y; } coord; static constexpr size_t buffer_size = sizeof( ...
Q1 : 命名空间 scope 是否允许用户定义的扣除指南? 在此处的示例中, GCC 和 Clang 不会产生相同的行为: https://godbolt.org/z/8W6hznEjo#include <tuple> template <typename T> st ...
假设我们有 class 依赖于两种模板类型,其中一种是我们专注于构造函数,我们可以不专注于可推导类型吗? ...