当前位置:  技术问答>linux和unix

使用c++编写gtk程序

    来源: 互联网  发布时间:2015-05-31

    本文导语:  学习gtk编程,后来想把它和c++的程序同时使用 解决方案: 1.使用绑定c++的gtk---gtkmm 2.只使用c++里的c 3.把所用的回调函数定义为c++类中的静态成员函数,然后用c接口来调用GTK 前面两个还可以理解,第三点还真不知道具体操...

学习gtk编程,后来想把它和c++的程序同时使用
解决方案:
1.使用绑定c++的gtk---gtkmm
2.只使用c++里的c
3.把所用的回调函数定义为c++类中的静态成员函数,然后用c接口来调用GTK

前面两个还可以理解,第三点还真不知道具体操作

|
因为C++的对象模型决定了类成员函数是单独存放的,而不是和类的数据成员在一起,因此必须有一种手段将类的实例告诉成员函数,因此成员函数拥有一个隐含的this指针作为所有成员函数的参数,这是由编译器悄悄完成的,一个极端的例子是你可以在成员函数中直接使用this来表示指向对象本身的指针。这样的结果是成员函数的参数列表和回调函数的要求不一致,从而导致非静态成员函数不能作为C的回调函数。
但是,静态成员函数却不相同,他们没有这个隐含的this指针参数,因此在静态成员函数中不能访问非静态数据成员,但是另一方面,他们的参数列表却能满足回调函数的需要,可以作为非成员函数的替代品。
遗留的问题是,静态成员函数作为回调函数,无法访问数据成员,常见的手法是使用回调函数常见的void* data参数用来传递对象的指针。

|
不会定义静态成员函数?

|
class MyControl
{
private:
  GtkButton* _btn;
public:
  static void foo(){}
  MyControl()
  {
    //...
    g_signal_connect(G_OBJECT(_btn),"clicked",foo,NULL);
  }
}

    
 
 

您可能感兴趣的文章:

  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 为什么使用了-l但 仍然不能使用C++类库
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • linux下的C++编译器怎样使用?
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 各位在Unix下开发,使用哪种c++编译器?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 在Linux下怎么使用C++啊?gcc是C吧?
  • c++类库Boost::bimap(双向映射)介绍及使用实例
  • 请问linux下可以使用c++么?
  • TinyXML(c++下操作xml的库)介绍,下载地址及使用代码举例
  • redhat linux平台下文件正在使用判别C++?
  • 在Python中使用SWIG调用C和C++程序
  • 如何编译一个使用了QT或KDE类的C++程序
  • c++ stl multimap基本操作使用技巧详细介绍
  • Linux下使用C++互斥访问文件+消息队列
  • 请问怎么样使用 Linux下的C++集成开发环境。
  • putty下如何使用gcc编译c或c++程序的资料
  • 大家在UNIX下写程序使用C++么?
  • 是不是只有C++才可以使用STL?
  • X86下使用C、C++
  • 请教如何使用Java编写的Applet程序关闭浏览器??
  • 如何使用自己编写的一个Bean?
  • vc编写dll动态连接库(编译过的)能在unix上开发使用吗?
  • 使用editplus编写java如何编译成字节码文件,如何解释
  • 类unix系统编写大规模响应网络服务程序使用什么套接字模型
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • 大家好,你们编写JavaBean时通常使用什么工具,用什么要方便点?
  • 自己编写一个简单的字符设备驱动程序以后,改怎么使用它?
  • 编写so时,使用了“打开设备语句”。
  • 菜鸟问题——其他语言怎样使用Java编写的程序(明确地说,使Class)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何使用linux下gdb来调试python程序
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 请教下,应用程序使用通过驱动程序使用设备的过程
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • asp程序使用的access在Linux下如何使用!
  • 哪位高手可以提供使用C/C++编CGI程序中,使用和设置Cookie的例子。为谢!!!
  • JSP和Servlet程序设计使用专辑---的程序代码哪有?
  • java的应用程序中如何定义一个全局变量,在程序的任何地方都可以修改使用?
  • Linux下写服务程序,程序可以使用配置文件动态链接库吗?
  • 使用GDB调试程序,如何正确的向程序传递参数.
  • 在ACC变成中要使用发ftp传送文件,但文件名不确定,请问怎么样在程序的FTP中使用字符串变量???
  • 应用程序为普通用户所有,不改变其所有,如何在程序中使用超级用户级别的函数啊
  • 怎么写个CGI程序获取远程linux主机的信息,如cpu使用率,内存使用等?
  • 为何程序中可以使用简体中文,不可以使用 big5 码的繁体中文
  • fork~exec不会使用,请问怎么使用,我只是想简单的用进程调用一个程序。
  • 急!哪位朋友在aix系统下配置过apache+tomcat ? 它所使用的apache+tomcat程序,是否可以用在linux下的程序是一样的 ? 在哪儿可以下载
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • 如何使用crontab来定时执行一个.php的程序
  • 请问这样在技术上是否可行?(我自己写一个程序来监听我的系统上的端口,有些端口已经被别的应用使用,我能够使用什么方法再去监听这个端
  • 使用终端远程执行程序的问题!
  • Python不使用print而直接输出二进制字符串
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • Office 2010 Module模式下使用VBA Addressof
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • c/c++预处理命令预#,##使用介绍
  • c#中SAPI使用总结——SpVoice的使用方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3