2017-10-09 34 views
0

我发现能够序列化用户定义的结构很有用。我通常使用类似如何用C++中的Msgpack减少编译时间?

#include <msgpack.hpp> 
struct MyStruct { 
    int val; 
    MSGPACK_DEFINE_MAP(val); 
}; 

这随后会在任何地方需要它包括在内。后来我注意到编译时间很长。当我用-H标志运行g ++时,发现大约1/3的包含文件与msgpack相关。

是否有任何方法可以轻松使用msgpack,同时避免头文件被重新包含在任何地方,并且膨胀编译时间?

+1

预编译头文件通常是大头文件的答案。如果您仅在少量翻译单元中使用msgpack,并且由于ODR违规而不关心未定义的行为,则可以#ifdef宏和msgpack包含。 – PeterT

+0

我会给予预编译的标题一个旋转。 我明白了......所以所有需要msgpack的构建目标都会定义一些像USE_MSGPACK的标志,并且我会将这些ifdef的任何地方都放在一起? – sardine

+0

如果必须在类定义中使用msgpack,则不惜一切代价避免msgpack。寻找可以在.cpp文件中使用的东西。 – o11c

回答

0

我对msgpack不是很熟悉,但我想到的第一个想法是pimpl这个班。然后,我想知道pimpl是否可以用于序列化并查看了msgpack文档。

There is a non-intrusive定义msgpack映射器的方法。您可以将此代码放在单独的MyStruct_serialize.hpp文件中,并仅在您实际序列化您的课程的位置包含此代码。这样,大多数代码不应该加载任何msgpack标题。

+0

我看到,非侵入式方法会做我想做的事。不幸的是,它需要写很多样板。 – sardine