gpt4 book ai didi

c++ - 在 C++11 中序列化类型 ID?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:20 26 4
gpt4 key购买 nike

假设我有一些模板类:

template<class T>
class Foo
{
void save(File& f);

/* load */ Foo(const File& f);

...
}

我有一个 Foo 的二进制文件格式。 Foo::save 保存到文件,Foo(File) 构造函数从文件加载它。

保存的时候我想在header中写T的类型,然后加载的时候我想验证构造函数中使用的T和文件中的T是否相同。

我应该如何生成这种类型代码?

(例如,我可以对 typeid(T).name() 进行 SHA。但是这可以在程序调用之间改变。有没有更好的方法?)

最佳答案

并没有真正的自动化、可移植的解决方案。我能想到的最好的方法是维护一个手动列表:

#include <type_traits>

template <typename T> struct persistent_type_id; // unimplemented primary!

template <> struct persistent_type_id<MyClass>
: std::integral_constant<uint32_t, 0x12345678> { };

template <> struct persistent_type_id<AnotherClass>
: std::integral_constant<uint32_t, 0x12345679> { };

// ...

用法:

persistent_type_id<T>::value

如果您未实现任何类型,您将立即收到编译器错误。

关于c++ - 在 C++11 中序列化类型 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com