variadic-templates相关内容

从 char 数组到 std::string 的类型推导

我正在尝试使用可变参数模板编写 sum 函数.在代码中,我会写一些类似 sum(1, 2., 3) 并且它将返回最通用的总和类型(在这种情况下 - double).问题出在字符上.当我称之为 sum("Hello", " ", "World!") 模板参数被推导为例如const char [7],因此它不会编译.我找到了将最后一个参数指定为 std::string("World!") 的方 ..
发布时间:2021-09-16 18:59:10 C/C++开发

std::bind 如何按值获取可变参数参数,即使使用其通用引用?

std::bind() 的函数签名 如下: 模板 所以 args 是一个可变参数模板通用参考,如果我理解正确的话.通用引用的传统模板类型推导规则如下: 如果传递给 T 的参数是左值,则将 T 推导为左值引用 如果传递给 T 的参数是右值,则将 T 推导为左值 ... 我认为这些规则将分别应用于 args 中的每个 arg,这意味着所有左值都作为参数传入 std::bind()函子 ..

可变参数函数周围的 C++ 向量包装器

我有一个如下所示的 API: templateWidget::Widget(std::string format_str, Args&&... args); 如果你有一个 'args' 的字符串向量,即在编译时不知道 args 的长度,你会如何调用这个方法? 包装函数的实现是什么样的,将它转换成这样的东西? templateWidget::WrapperWidget(std::stri ..
发布时间:2021-09-16 18:59:02 C/C++开发

在编译时查找数组中的重复项

我正在尝试学习一些更现代的 C++ 实践,例如模板,我决定创建一个天真且简单的命令行参数解析器,它主要在编译时工作,但我已经遇到了 constexpr,基本上我想要做的就是在编译时检查重复条目(在运行时做这件事很简单). 首先,我有一个包含单一配置的结构: struct Arg_Opt_Tuple {std::string_view mc{};//多字符,即“帮助"字符 sc{};//单字 ..
发布时间:2021-09-16 18:58:59 C/C++开发

在可变参数模板参数中混合类型和非类型?

是否可以在可变参数模板参数中混合类型和非类型?如果我将一个 std::array 例如作为参数 T 传递给这个类,我还需要传递数组的类型和长度,但是我在下面尝试的方式在遇到值时会导致错误,因为它只需要 Types 的类型: 模板 C类{T贮存;};int main(){CC;} 错误信息: 错误:模板类型参数的模板参数必须是一 ..
发布时间:2021-09-16 18:58:56 C/C++开发

可变参数模板错误:“必须扩展参数包";

这是我编写的可变参数模板函数: template价值&插入(容器& c,Args&&... args){c.emplace_back(args);返回 c.back();} 当我像这样使用 insert 时,我收到一个错误: listlst;内部&num = insert, int, int>(lst, 4); 错误在insert的正文中抱怨这一行: c.emplace_back(arg ..
发布时间:2021-09-16 18:58:47 C/C++开发

如何通过参数包传递引用?

我有以下代码: #include 模板void foo(Fun f, Args... args){f(参数...);}int main(){int a = 2;整数 b = 1000;foo([](int &b, int a){ b = a; }, b, a);std::printf("%d\n", b);} 当前打印1000,即b的新值在某处丢失.我猜这是因为 foo 按值传递参数包中的参数 ..
发布时间:2021-09-16 18:58:43 C/C++开发

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

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

如何用可变参数函数覆盖 C++ 类中的运算符?

C++ 新手这里:我想创建一个模板类来创建不同数据类型和 d 维度的张量,其中 d 由形状指定.例如,形状为 (2, 3, 5) 的张量有 3 个维度,包含 24 个元素.我使用一维向量存储所有数据元素,并希望使用形状信息访问元素以查找元素. 我想覆盖 () 操作符来访问元素.由于维度可能会有所不同,() 运算符的输入参数数量也会有所不同.从技术上讲,我可以使用向量作为输入参数,但 C++ ..
发布时间:2021-09-16 18:58:03 C/C++开发

模板可变参数函数:具有任意数量构造函数参数的任意数量的类

我不确定正确的名称是什么,到目前为止我理解使用可变参数模板参数的概念(例如,与 std::initializer_list 相比). 所以让我们假设有任意数量的类 k 和任意数量的参数 i 依赖于每个类 k 构造函数. 我知道我可以使用可变参数模板构造任何 k 类: template void make_class(Args... args){汽车 k = T(args...);} ..
发布时间:2021-09-16 18:57:55 C/C++开发

使用模板参数包代替宏

我正在阅读 Andrei Alexandrescu 的现代 C++ 设计,我正在尝试使用他提供的一些类型列表示例.在下面的示例中,我想创建一个包含类型和整数的 Option 结构的列表.后来我想创建这些选项的类型列表,然后将它与一个整数一起传递给另一个结构 FindTypeForMapping.如果整数匹配选项列表中设置的任何整数,则表达式应计算为该选项的类型,否则应计算为我的自定义类型 Null ..
发布时间:2021-09-12 18:40:41 C/C++开发

可变参数类参数成员变量的异构存储

我有一个可变参数类模板,用于为可变数量的类创建顶级类.要进入顶级类的每个类都是从基类派生的,因为它们具有通用功能.我不知道在父类中存储派生类的最佳方式,但仍然能够访问派生类的全部功能. 如果我将可变参数 args 存储在向量中,它们将全部存储为基类,并且我无法访问派生功能.如果我将它们存储在一个元组中,我将无法弄清楚如何通过派生类型访问这些函数.如果我尝试访问它们如此处讨论的那样,则 mak ..
发布时间:2021-09-10 20:11:23 C/C++开发

C++ 句柄/主体类由模板参数包自动组成.这可以改进吗?

问题: 多个组件希望共享相同的不可变数据(任意类型),但每个组件都有一组不同的接口要求. 例如,组件 A 可能要求有一个名为 hash_code(const object&) 的可用函数,而组件 B 可能要求对象有一个可用的名为 type(const 对象&). 如果组件 C 生成一个指向某个对象 O 的共享指针,对于该对象 O,有一个名为 hash_code 的可用函数和一个名 ..
发布时间:2021-09-04 20:53:54 C/C++开发