例如,我有一個結構,其是這樣的:獲得名稱和一個結構域的類型,從物體
struct Test
{
int i;
float f;
char ch[10];
};
我有這個結構的目的,例如:
Test obj;
現在,我想以編程方式獲取字段名稱和obj
的類型。可能嗎?
這是C++ BTW。
例如,我有一個結構,其是這樣的:獲得名稱和一個結構域的類型,從物體
struct Test
{
int i;
float f;
char ch[10];
};
我有這個結構的目的,例如:
Test obj;
現在,我想以編程方式獲取字段名稱和obj
的類型。可能嗎?
這是C++ BTW。
你正在問的是Reflection in C++。
恐怕你不能得到字段名,但你可以得到的OBJ使用Boost.Typeof類型:
#include <boost/typeof/typeof.hpp>
typedef BOOST_TYPEOF(obj) ObjType;
沒有它不可能沒有寫自己的「結構」體系。您可以獲得會員的大小,但您需要知道其名稱。就我所知,C++不允許在編譯或運行時枚舉給定對象的成員。你可以放一些函數,比如「GetNumMembers()」和「GetMemberSize(index)」等來獲得你後面的信息...
您可能還想在網上搜索「C++序列化」,特別是Boost
庫。我也會搜索堆棧溢出「C++序列化」。
許多C++新手想從類名創建對象實例或根據名稱填充類字段。這就是序列化或反序列化派上用場的地方。
我需要類和成員名稱的經驗來自打印調試信息。處理異常時,類和字段名稱會很有用,尤其是生成它們。
如果你能得到它,你會如何處理這個名字? – 2010-03-25 09:57:08
必須根據代碼生成一些文件。我們可能會在離線時解析源代碼文件,但我正在尋找一些看起來不存在的優雅解決方案:( – Aamir 2010-03-25 10:05:56