在结构/类中查找第一个基础基元
Find first underlying primitive in struct/class
前提:
我有一个可变模板函数,它接受具有同质成员类型的POD(普通的旧数据结构(。
可接受的POD可以完全由4字节整数XOR 4字节浮点组成。
在内部,可变参数被强制到底层类型的指针,并用作基元数组。
问题:
目前,模板功能要求用户提供有关这些POD格式的一些附加信息;例如以下内容:
声明
template<typename ...U>
void foo(const char *format, U... bars);
用法
Blah much, wow; // Underlying type is integral.
Bleh such, params; // underlying type is float.
//...
foo("iffi",much,params,such,wow);
它有效,但我想绕过格式化字符串。
问题:
有没有一种方法可以在编译时评估底层类型?
编辑:结构的布局及其成员的名称直到编译时才知道。也就是说,库的用户正在提供任意同质POD。
要绕过字符串格式,您可以创建一个特性:
template <typename T /*, typename AlwaysVoidForSFINAE = void*/> struct UnderlyingPodType;
template <> struct UnderlyingPodType<Blah> { using type = int; };
template <> struct UnderlyingPodType<Bleh> { using type = float; };
template<typename ...Ts>
void foo(Ts&&... ts)
{
using types = std::tuple<UnderlyingPodType<std::decay_t<Ts>>...>;
// ...
}
相关文章:
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 代码以查找数组中的最大数字,但它仅将第一个数字显示为最大数字. 有人请告诉我为什么
- 如何在数组的一部分中查找特定值的第一个元素
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 从文件的一行中查找数字的平均值,避免使用第一个单词
- C++ 查找未排序数组中第一个缺失的正值
- 在向量C++中查找特定的第一个和最后一个索引<float>
- 如何使用 std::find 从向量的第一个元素中查找字符串<字符串对<字符串、字符串> >类型?
- 查找第一个文件W通配符匹配
- 查找第一个文件/查找下一个文件不返回文件夹中的所有文件
- C++ - 查找数组中第一个和最后一个负数之间的数字
- 查找一个区域中未包含在另一个区域中的第一个元素
- 查找第一个文件问题无法使任何示例正常工作。
- 提取所有文件名 - 查找第一个文件
- 查找第一个文件在根路径上失败
- C++在具有O(n)空间的数组中查找第一个非重复整数
- Win32 查找第一个文件非终止通配符扩展
- 运行时在boost::mpl::vector中查找第一个匹配项
- C++从映射中的第一个查找对
- 字符串查找第一个非的 C++ 问题