是否可以使用模板元编程将任何结构或类转换为元组?

例如:

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(这样就不必编写样板代码了)。 Factory生成器似乎也非常强大(设置了相同的初始宏,您可以交换想要输出JSON,SOCI或流等的任何工厂生成器),但是学习曲线更大/安装程序,如果您想编写自己的工厂生成器。最后一点注意事项:经过一些细微的调整,我得以使其在gcc 4.7.2上与C++ 11一起工作;同样,该文档经过了很好的氧合处理,并且似乎有足够多的示例可以帮助您快速上手。

最佳答案

我认为在C++中没有办法做到这一点。

我不知道一种枚举结构中的字段/类型的方法-如果您可以这样做,我认为构造这样的元组将非常简单。

我相信Boost.Fusion有一个有助于此的宏,名为FUSION_ADAPT_STRUCT,但这全是手动的。

这个技术术语是“反射”,您可以通过搜索“C++反射”来找到许多有关它的信息。

这是一篇这样的文章:How can I add reflection to a C++ application?

10-07 22:06