是否可以使用模板元编程将任何结构或类转换为元组?
例如:
struct Foo
{
char c;
int i;
std::string s;
};
typedef std::tuple< char, int, std::string > Foo_Tuple;
如果有一些模板代码会自动为我生成 Foo_Tuple 那就太好了。
回答
对于这样一个简单的情况,这有点过分了,但对于更复杂的情况(例如 ORM 或任何需要编写大量样板代码,而仅仅模板或宏不足以完成任务),Boost Mirror看起来它可能非常有用。我对 Boost Mirror 进行了深入研究:基本反射功能(在 Mirror 和 Puddle 中)并不难理解,很容易设置并且似乎相当广泛(可以处理许多结构,包括 C++11枚举类等...)。我发现这个基本功能已经绰绰有余——我可以使用 MACROS 来将我的类暴露给反射(这样我就不必编写样板代码)。工厂生成器似乎也非常强大(使用相同的初始宏设置,您可以交换任何您喜欢输出 JSON、SOCI 或流等的工厂生成器...),但学习曲线更大/ setup,如果你想编写自己的工厂生成器。最后几点注意事项:经过一些小的调整,我能够让它在 gcc 4.7.2 上与 C++11 一起工作;此外,文档已经很好地氧化了,似乎有足够多的例子可以快速开始。