【发布时间】:2019-02-19 14:42:43
【问题描述】:
我有一个简单的序列化框架,它为各种类型定义了 Read 和 Write 模板函数的特化,包括算术、我的类和 std 容器,如 vector、array、map 等......,所以可以这样做
std::vector<std::string> v{ "a1", "b123", "c12345" };
Read(stream, v);
Write(stream, v);
或
std::map<int, MyClass> m;
Read(stream, m);
Write(stream, m);
,例如。
我正在寻找一种方法来确定在编译时是否是可序列化的类型,方法是实现如下:
template <class T>
constexpr bool is_serializable()
{
if (Read<T> and Write<T> are defined)
return true;
return false;
}
或者可能是别的什么。
有可能吗?
Read 和 Write 的声明:
template <typename T>
void Read(InputStream & s, T & val);
template <typename T>
void Write(OutputStream & s, T val);
理论上,除了 Read 和 Write 之外,我还可以为我需要的每种类型定义 is_serializable,但这需要更多的输入,并且可能使代码更复杂,因此自动定义 is_serializable 是一种更优雅的方式。
它也可以是一些以读写函数为成员的序列化器模板类。在这种情况下,我需要知道是否有针对特定类型的 Serializer 专门化。例如,我可以用它做something like this。
【问题讨论】: