是否可以使用模板元编程将任何结构或类转换为元组?
例如:
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?