【发布时间】:2020-10-19 23:27:06
【问题描述】:
我正在寻找一种基于模板的方法来在initialization_list(s) 中传递任意数量的参数。
类似:
func({0, 1}, {0, 2.0f}, {0, "boo"}, ...);
或
func({{0, 1}, {0, 2.0f}, {0, "boo", ...}});
同时,我希望能够检查每个(内部)大括号中第二个参数的类型。也许得到sizeof(T)也许做一些if constexpr(std::is_same<T, ...>::value)匹配。
有可能吗?如果是这样,func() 的定义会是什么样子?
【问题讨论】:
-
内括号总是有2个元素?
-
std::initializer_list<T>,其中T是具有重载构造函数的类型? -
@cigien 是的,基本上是一个索引和一个值
-
找出类型并不难。你想对
func中的所有这些类型做什么? -
我的计划是将任意类型的变量占用的内存复制到一些不透明的内存区域中。需要类型信息才能获取 sizeof(T) 以将大小传递给 memcpy。
标签: c++ templates variadic-templates