c++:在泛型代码中获取对象大小的最佳方法
C++: best way to get size of object in generic code
我正在编写一个模板类,它调用一个散列函数,该函数以指向对象的指针和对象的大小作为参数。
例如,如果item
是int
类型,则调用将是MurmurHash2(&item, sizeof(item), seed);
但是如果item
是std::string
,我们就必须做MurmurHash2(item.c_str(), item.size(), seed);
你的解决方案本质上是有缺陷的,你不能通过一个指向对象开头和对象大小的指针来创建一个哈希函数,并期望它能工作。考虑一个简单类型和两个变量:
struct T {
char ch;
int i;
} a = { 'a', 1 }, b = { 'a', 1 };
在我目前的平台上(我想象在大多数平台上),sizeof(T) == 8
中只有5个字节是对象的值的一部分,其他3个是填充。填充中的字节值不能保证有任何值,即使两个对象持有相同的值,它们在a
和b
中也可能不同。
一个可能的解决方案:使用Boost之类的东西。序列化将对象转换为标准化的字节流,然后将其与大小一起传递给MurmurHash函数。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?