![](/img/trans.png)
[英]Defining a proxy for a member function that takes a member function pointer as a template argument
[英]Create a pointer that points to a member function that takes a struct as an argument
我有 main.cpp 文件,我在其中定義了一個結構:
struct values {
string name1;
string name2;
int key ;
} a;
在頭文件 Encrypt.h 和一個文件 Encrypt.cpp 中定義了一個名為Encrypt的類,我在其中定義了我的函數...我試圖創建一個指針,該指針指向一個具有結構類型作為參數的函數,我是這樣做的:在我的頭文件Encrypt.h
#ifndef Encrypt_h
#define Encrypt_h
#include<iostream>
using namespace std;
class Encrypt {
public:
void print(void *);
};
#endif /* Encrypt_h */
在我的Encrypt.cpp中:
void Encrypt::print(void * args)
{
struct values *a = args;
string name= a.name1;
cout<<"I'm"<<name<<endl;
};
這是我嘗試在main.cpp中創建指針的方法
void (Encrypt::* pointer_to_print) (void * args) = &Encrypt::print;
我得到的錯誤:
“不能用'void *'類型的左值初始化'struct values *'類型的變量”在Encrypt.cpp中
該行:
struct values *a = args;
評論
我這樣做是因為我想將一個具有超過 2 個參數的函數傳遞給函數: pthread_create()
所以我的函數 print 只是我簡化的示例。
問題是args
是void*
類型,而a
是values*
類型,所以你會得到上面提到的錯誤。
要解決此問題,如果您確定允許強制轉換,您可以使用static_cast
將args
轉換為values*
:
values *a = static_cast<values*>(args);
另外將a.name1
更改為a->name1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.