variadic-templates相关内容

参数包感知 std::is_base_of()

是否有可能静态断言作为模板参数提供的类型是否实现了参数包中列出的所有类型,即.参数包感知 std::is_base_of()? template 类 CommonBase{static_assert(is_base_of::value, "Invalid.");^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^std::is_base_of() 的参数包感知版本民众:模板 T* ..
发布时间:2021-09-04 20:51:17 C/C++开发

使用 enable_if 检查参数包的类型

由于对允许的非类型可变参数模板有限制,我试图使用 enable_if 编写一个接受任意数量双精度的函数.本质上,我想做类似的事情: template::value, T>::type>foo(T... t){/* 代码在这里 */} 我选择将 enable_if 作为未命名参数的默认值,因为我的函数实际上是一个构造函数并且没有返回值.这适用于单个参数,但由于它是一个可变参数模板 T 是一个参 ..
发布时间:2021-09-04 20:47:26 C/C++开发

通过可变参数模板应用属于其他类的函数

假设我有三个类,ClassA、ClassB 和 ClassC.所有这三个类都有一个名为 updateValue(int) 的函数.然后我将控制器类称为 Controller.Who 的构造函数的模板如下: 类控制器{民众:模板 控制器(类和...类);//也许初始化一个元组?void setValues(int val){//解包任何数据结构并调用每个类 upd ..
发布时间:2021-09-04 20:45:25 C/C++开发

C++ 可变参数模板特化(和 static_assert)

是否可以特化这个模板声明: template 类型 Foo(ARGS... args) {静态断言(假);} 我尝试了一些方法,例如: 模板 int Foo(float args) {返回 42;} ...但是当我尝试这样使用它时我总是点击静态断言: auto value = Foo(1.5f); 正确的语法是什么? 解决方案 作为状态,false 不依赖于模板,所以 st ..
发布时间:2021-09-04 20:44:43 C/C++开发

在编译时创建所有可能的键值类型映射的变体类型,其中键和值类型从类型元组中指定

目前,我有一个 map 类型的 variant,其中我对键值对的所有变体进行了硬编码,例如: //例如,如果我们支持 std::string 和 int 类型作为键值对使用 MapCombinator = std::variant,std::map,std::map,std::map; 在实际情况中,除了std::string 之外,我还需要支持所有基本类型的键值对.这就是为什么我只想指定一个 ..

虚拟继承是否强制基类默认可构造?

在以下代码中,编译器要求基础类 X默认可构造.但是,如果我从 类 Node 的继承中删除 virtual 关键字,对成员 m_x 的访问当然变得不明确,但不再需要类 X 的默认构造函数. 这是什么原因? #include 结构体应用{模板struct Node : virtual T//这一行包含虚拟继承{模板节点(参数...参数):T(参数...){}};模板结构继承;模板结构继承继承( ..

创建两个可变参数的非类型模板参数包的笛卡尔积扩展

可以说,我有 两个非类型模板参数列表(可能有不同的类型) 一个模板 foo,它将每个列表的一个值作为参数 如何创建 foo 的可变参数包,并使用两个列表元素的笛卡尔积进行参数化? 我的意思是: template结构 u_list {};模板结构 c_list {};模板结构 foo {};模板结构栏{};使用 int_vals = u_list;使用 ch ..

为没有模板参数的可变模板递归创建基本情况

我正在尝试对可变参数模板使用递归.我希望基本情况具有零模板参数.在查看了之前问题的 stackoverflow 答案后,我发现了对这个问题的两种回应: 您不应专门化模板函数.Herb Sutter 在这里写道:http://www.gotw.ca/publications/mill17.htm 您使用模板 或 模板 .例如这里的第一个答案:如何编写可变参数模板递归函数? 我尝试在我的 ..

在可变参数模板中复制的引用参数

我有一个 Event 类,它将一组 weak_ptr(观察者)元组存储到一个函数中,该函数在“触发"事件时执行. 示例中的函数类型为:void(int &).也就是说,我想触发传递对值的引用的事件,让观察者更改该值并验证该值是否已更改回被观察对象中.顺便说一下,事件实现是可变的,这可能会使问题(至少是代码)复杂化. 目前这是失败的.沿着这条线的某个地方,引用被转换为非引用或复制,但我看 ..
发布时间:2021-06-14 19:52:45 C/C++开发

在 C++ 中迭代类继承

假设我有一个类架构(类的数量在开发期间不断增加),每个类都继承自 N 个具有相同基本接口的类.创建将迭代继承的基函数(在基类或派生类中)的最佳方法(如果可能)是什么? 目标:避免开发人员的错误,并确保我们不会忘记从所有继承中调用所有基本函数使代码更清晰易读. 请查看更新状态的编辑说明 简短示例: class shared_base {上市:虚拟无效功能()= 0;}类 base ..

可变多维数组

我可以调用一个多维数组吗 func(0,0,0);//=>如果我知道它是运行时的维度.功能(0,0,0,0,0,0,0,0,0,0,0);//=>如果我知道它是运行时的维度. 通过可变参数模板的帮助 代替: data[0][0][0];数据[0][0][0][0][0][0][0][0][0][0][0]; 解决方案 这应该可行,但您必须使用 indexed 而不是执行 data[ ..

x:= [... string {"Sat","Sun"}与x:= [] string {"Sat","Sun"}

在go lang spec 中,他们在其中一个示例中使用了三个点: days:= [...] string {"Sat","Sun"}//len(days)== 2 如果遗漏了三个点,有什么区别吗? 解决方案 它产生了很大的不同 :区别在于 array 和 slice之间. [] string 创建一个指向字符串数组的切片.另一方面, [...] 创建一个 actual 字符 ..
发布时间:2021-05-11 19:29:54 其他开发