加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从静态函数调用非静态变量

发布时间:2020-12-16 07:10:15 所属栏目:百科 来源:网络整理
导读:我是C的初级程序员,为我的公司做一个PoC.所以我为我的基本问题道歉. class TestOne{ private: TestTwo* t2; void createInstance(TestTwo* param){ t2 = param; } static void staticFunctionToAccessT2(){ // Now here I want to access "t2" here in the c
我是C的初级程序员,为我的公司做一个PoC.所以我为我的基本问题道歉.

class TestOne{
  private:
    TestTwo* t2;

  void createInstance(TestTwo* param){
    t2 = param;
  }

  static void staticFunctionToAccessT2(){
    // Now here I want to access "t2" here in the current instance of the class
    // By current instance I mean "this" in non-static context
    // currently there is no function to get object,but can be created
    // ** we cannot call new TestOne(),because that will create a new instance
    // ** of the current class and that I don't want.
  }
}

在这方面的任何帮助将不胜感激.

谢谢

=== UPDATE ===

这可以作为我在QT Creator中开发应用程序的场景,其中我有一个预定义签名的静态函数,并希望访问UI元素以进行文本更改(如TextEdit)

解决方法

即使在Java中也不能这样做.

静态方法只是类的所有实例的本地辅助函数,无法访问单个类状态(例如t2).

从方法中删除静态,或者使成员变量成为静态变量,具体取决于您要完成的操作.

编辑:

如果我理解正确,你的SDK需要一个函数指针,它将调用它来修改你的实例’t2.你的mutator方法应该是公共的和非静态的.所以我们只是说你重新定义了staticFunctionToAccessT2,如下所示:

public: void mutateT2();

如果要调用mutateT2的实例定义为:

TestOne foo;

你的SDK想要一个函数指针,你可以在其中传递:

std::bind(&TestOne::mutateT2,foo)

正如下面的Mike Seymour所指出的那样,只有当SDK方法参数是std :: function而不是它的参数是原始函数指针时才有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读