加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++ 反射

(2016-12-01 15:26:58)
标签:

it

qt

reflection

反射

c

分类: 编程技术
方法一:使用boost 的 reflection

boost 的 reflection 提供了一种简单的机制,允许我们为存在 reflection 的类进行 reflection 性质的行为。而对于一般的类,我们依旧是无法使用 reflection 特性的。前面在 extension 的介绍中我们也看到了一个使用 reflection 的例子。我们利用 extension 创建了所谓的 reflection_map,这将一个字符串(往往是类名)关联到一个 reflection 对象,通过这个 reflection 对象的 get_constructor 方法获得该类的构造函数,而通过 get_function 获得这个类的成员函数。利用这些就能够完成基本的 reflection 操作。

下面的例子介绍了如何为一个基本的类提供其需要的 reflection。

#include "iostream"

#include "boost/reflection/reflection.hpp"

class HelloWorld {

public:

  void printHelloWorld() {

    std::cout << "Hello World!" << std::endl;

  }

} ;

boost::reflections::reflection

GetReflection() {

  boost::reflections::reflection r;

  r.reflect ()

   .constructor()

   .function( &HelloWorld::printHelloWorld, "print hello world" ) ;

  return r;

}

int

main (int argc, char* argv[] ) {

  boost::reflections::reflection r = GetReflection () ;

  if ( r.get_constructor().valid() and

       r.get_function("print hello world").valid() ) {

    boost::reflections::instance i = r.get_constructor()();

    r.get_function("print hello world")(i);

  } else

    std::cerr << "Unable to find a required method.\n" ;

  return 0 ;

}




这里可以清楚的看到,我们只需要调用 reflection 对象的 reflect 方法,然后将需要的 constructor、成员函数乃至成员(通过 data 方法)加入。之后就能够按照我们的要求进行调用了。



方法二:使用QT的Meta-Object Compiler(moc)​

0

阅读 收藏 喜欢 打印举报/Report
后一篇:
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有