variadic-templates相关内容
我正在尝试使用可变参数模板编写 sum 函数.在代码中,我会写一些类似 sum(1, 2., 3) 并且它将返回最通用的总和类型(在这种情况下 - double).问题出在字符上.当我称之为 sum("Hello", " ", "World!") 模板参数被推导为例如const char [7],因此它不会编译.我找到了将最后一个参数指定为 std::string("World!") 的方
..
std::bind() 的函数签名 如下: 模板 所以 args 是一个可变参数模板通用参考,如果我理解正确的话.通用引用的传统模板类型推导规则如下: 如果传递给 T 的参数是左值,则将 T 推导为左值引用 如果传递给 T 的参数是右值,则将 T 推导为左值 ... 我认为这些规则将分别应用于 args 中的每个 arg,这意味着所有左值都作为参数传入 std::bind()函子
..
我有一个如下所示的 API: templateWidget::Widget(std::string format_str, Args&&... args); 如果你有一个 'args' 的字符串向量,即在编译时不知道 args 的长度,你会如何调用这个方法? 包装函数的实现是什么样的,将它转换成这样的东西? templateWidget::WrapperWidget(std::stri
..
我正在尝试学习一些更现代的 C++ 实践,例如模板,我决定创建一个天真且简单的命令行参数解析器,它主要在编译时工作,但我已经遇到了 constexpr,基本上我想要做的就是在编译时检查重复条目(在运行时做这件事很简单). 首先,我有一个包含单一配置的结构: struct Arg_Opt_Tuple {std::string_view mc{};//多字符,即“帮助"字符 sc{};//单字
..
是否可以在可变参数模板参数中混合类型和非类型?如果我将一个 std::array 例如作为参数 T 传递给这个类,我还需要传递数组的类型和长度,但是我在下面尝试的方式在遇到值时会导致错误,因为它只需要 Types 的类型: 模板 C类{T贮存;};int main(){CC;} 错误信息: 错误:模板类型参数的模板参数必须是一
..
使用 std=c++17 作为唯一编译器标志编译的代码片段... ... 使用 GCC 9.1 成功编译.Godbolt ... 使用 Clang 8.0.0 发出编译器错误(错误在代码段下方).Godbolt 问题:这是 Clang 编译器中的一个错误,还是 GCC 错误地接受了这段代码,或者是其他什么东西在起作用? #include #include 模板
..
对于每个参数,我需要应用两个嵌套函数: obj.apply(someFilter(arg));//arg 是一个参数,但在这里//应该是 args 的解包 我不知道如何为这种情况编写解包. 我看到了: pass{([&]{ std::cout
..
这是我编写的可变参数模板函数: template价值&插入(容器& c,Args&&... args){c.emplace_back(args);返回 c.back();} 当我像这样使用 insert 时,我收到一个错误: listlst;内部&num = insert, int, int>(lst, 4); 错误在insert的正文中抱怨这一行: c.emplace_back(arg
..
我有以下代码: #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 按值传递参数包中的参数
..
比方说,我有以下一段代码: #include 模板结构 E {};模板 void func (E, Ts...) {std::cout
..
在我的 C++ 旅行中,我遇到了以下习语(例如 此处 in Abseil) 用于确保模板化函数不能显式指定模板参数,因此它们不是有保证的 API 的一部分并且可以自由更改而不会破坏任何人: template void AcceptSomeReference(const T&); 它似乎确实有效: foo.cc:5:3: 错误:没有匹配的函数调用“AcceptSomeReference"Acc
..
#include 使用命名空间标准;#define __deb(X...) (cout 无效调试(类型 &&... args){((__deb(args)), ...);}int main(){int a = 1, b = 3;调试(a,b);返回0;} 我得到了类似 [args]:1[args]:3 的输出但我想要像 [a]:1[b
..
对于下一个程序,clang++ 和 g++ 有不同的行为: #include #include 模板struct ref { 类型 &价值;};模板类型 &&get(ref const & r){返回 std::forward(r.value);}模板decltype(auto) apply_inverse(F && f, types &&... values){返
..
C++ 新手这里:我想创建一个模板类来创建不同数据类型和 d 维度的张量,其中 d 由形状指定.例如,形状为 (2, 3, 5) 的张量有 3 个维度,包含 24 个元素.我使用一维向量存储所有数据元素,并希望使用形状信息访问元素以查找元素. 我想覆盖 () 操作符来访问元素.由于维度可能会有所不同,() 运算符的输入参数数量也会有所不同.从技术上讲,我可以使用向量作为输入参数,但 C++
..
我不确定正确的名称是什么,到目前为止我理解使用可变参数模板参数的概念(例如,与 std::initializer_list 相比). 所以让我们假设有任意数量的类 k 和任意数量的参数 i 依赖于每个类 k 构造函数. 我知道我可以使用可变参数模板构造任何 k 类: template void make_class(Args... args){汽车 k = T(args...);}
..
我有一个带参数包的函数: templatevoid tprintf(const char* 格式,Targs...args) {} (实现无关紧要,只是签名).我想使用 GCC/Clang 内置函数将源位置添加为默认参数.类似的东西 templatevoid tprintf(const char* 格式,Targs...args,const char* 文件 = __builtin_FILE
..
我正在阅读 Andrei Alexandrescu 的现代 C++ 设计,我正在尝试使用他提供的一些类型列表示例.在下面的示例中,我想创建一个包含类型和整数的 Option 结构的列表.后来我想创建这些选项的类型列表,然后将它与一个整数一起传递给另一个结构 FindTypeForMapping.如果整数匹配选项列表中设置的任何整数,则表达式应计算为该选项的类型,否则应计算为我的自定义类型 Null
..
我有一个可变参数类模板,用于为可变数量的类创建顶级类.要进入顶级类的每个类都是从基类派生的,因为它们具有通用功能.我不知道在父类中存储派生类的最佳方式,但仍然能够访问派生类的全部功能. 如果我将可变参数 args 存储在向量中,它们将全部存储为基类,并且我无法访问派生功能.如果我将它们存储在一个元组中,我将无法弄清楚如何通过派生类型访问这些函数.如果我尝试访问它们如此处讨论的那样,则 mak
..
我想我会先展示这个例子然后再解释它: #include 模板结构参数{使用 T = T_;静态 constexpr size_t size = size_;};模板结构体{模板std::array&getArray()//应生成 Arguments 中所有 args 的特化{静态 std::array啊;返回 arr;}};int main(){Foo, arg, arg我的福;myFoo.ge
..
问题: 多个组件希望共享相同的不可变数据(任意类型),但每个组件都有一组不同的接口要求. 例如,组件 A 可能要求有一个名为 hash_code(const object&) 的可用函数,而组件 B 可能要求对象有一个可用的名为 type(const 对象&). 如果组件 C 生成一个指向某个对象 O 的共享指针,对于该对象 O,有一个名为 hash_code 的可用函数和一个名
..