c++ so 反射_c++如何实现反射功能?
問題主 和 @vczh 可以看下我這樣弄,是否符合要求?
定義類的時候稍微傻一點,但是他既不要求pod, 也沒有什么侵入式的基類要求。甚至還允許你把成員定義成private的。連C++11都不需要。
struct test_type0{
DEF_FIELD_BEGIN(test_type0)
private:
DEF_FIELD(int, x)
public:
DEF_FIELD(std::string, y)
DEF_FIELD_END
};
struct test_type1{
DEF_FIELD_BEGIN(test_type1)
DEF_FIELD(test_type0, z)
DEF_FIELD(std::string, w)
DEF_FIELD_END
};
然后就可以用functor去遍歷這些類實例的成員了。目前支持僅傳成員,傳成員+成員的名字,傳成員+成員的名字+成員的深度(這樣就可以把結構體轉換成json或者xml了)3種參數類型的functor。例子里頭有詳細的介紹。
容器類型怎么辦?。??隙ㄔ谀鉬unctor里面自己遍歷啦,容器自己都是支持遍歷的嘛,好傻的問題咯。
核心技術其實就是如何給成員計數,如何把成員轉換成整數吧。用了一個過去boost::typeof的技巧。
為了你這個問題,我犧牲了午睡給你寫了個github項目(其實主要是把我另外一個項目里面的部分功能給抽離了出來yuanzhubi/raw_buffer),問題主你看是否該給我點個贊?完全不需要什么CLR來支持。
除了沒法支持遍歷父類的數據成員之外,應該是足夠了。你看下測試用例 是否已經覆蓋夠了你的要求。目前就支持深度優先遍歷。
通過gcc4.5, vs2008測試。 header only, C++03 only。 性能和你手寫遍歷成員是一模一樣的。
總結
以上是生活随笔為你收集整理的c++ so 反射_c++如何实现反射功能?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节跳动开发者工具_FAQ | 字节跳动
- 下一篇: scope参数错误或没有scope权限_