簡體   English   中英

c ++:成員函數作為另一個函數的參數

[英]c++: A member function as argument to another function

我試圖將一個函數從一個類傳遞給其他函數參數。 我收到這個錯誤。

錯誤:類型為“ void(A_t ::)(int)”的參數與“ void(*)(int)”不匹配

有沒有辦法管理這個,仍然使用類a中的函數。 提前致謝。

#include <iostream>

using namespace std;

void procces(void func(int x),int y);

class A_t
{
   public:
      A_t();
      void function(int x)
      {
          cout << x << endl;
      }
};

int main()
{
   A_t a;

   procces(a.function,10);
}

void procces(void func(int x),int y)
{
    func(y);
    return;
}

這是一個如何使用指向函數成員的指針的示例:

class A_t {
public:
    void func(int);
    void func2(int);
    void func3(int);
    void func4(int);
    ...
};

typedef  void (A_t::*fnPtr)(int);


int process(A_t& o, fnPtr p, int x)
{
    return ((o).*(p))(x);
}

int main()
{
    fnPtr p = &A_t::func;
    A_t a;
    process( a, p, 1 );
    ...
}

在main函數中,您可以使用func成員函數以及func2func3func4

為此,必須將function()聲明為靜態函數。 如果您在類中放置非靜態成員函數,則它與該類的特定實例相關聯。

如果要定義一個API,可以為其映射C函數和C ++成員函數,則按如下所示定義過程,並使用綁定來傳遞成員函數...。

NB:沒有測試過(我在手機上!)

 class A {
 public:
     void func(int);
     static void StaticWrapper(A* ptr, int i)
     { ptr->func(i);}
...
};

 typedef  void (CStyleCB*)(int);


  int process( CStyleCB p, int x)
  {
      return (*p)(x);
  }

  int main()
  {
      A a;
      process( bind(&A::StaticWrapper, this, _1),   1 );
       ...
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM