mxw*_*mxw 0 c++ struct void-pointers
获取演示代码
#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef struct Student
{
public:
Student(){}
~Student(){}
static void print(int a,int b){printf("age is a\n");}
}Student;
int main(){
void (*p)(int, int) = &Student::print;
vector<void(*)(int,int)> tt;
tt.push_back(p);
tt[0](1,1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我想将 void(*)(int,int) 作为结构成员时,例如
struct void_func_st{
void(*)(int,int) f;
int a;
};
Run Code Online (Sandbox Code Playgroud)
代码错误。我不知道该结构是否可以实际制作,因为我不熟悉 void(*)(...) 的工作原理。或者我只是没有找到使 void(*)(...) 作为结构成员的正确方法。有人可以给一些建议吗?
它将是(就像您对p中的局部变量所做的main那样)
void(*f)(int,int);
Run Code Online (Sandbox Code Playgroud)
请注意,typedef/using或一些“包装器”可能有助于拥有更常规的语法,例如:
using bin_func = void(int, int);
bin_func* f2;
std::add_pointer_t<void(int, int)> f3;
std::type_identity_t<void(int, int)>* f4;
Run Code Online (Sandbox Code Playgroud)
使用std::function并忘记令人困惑的函数指针语法:
struct void_func_st {
std::function<void(int,int)>; f;
int a;
};
Run Code Online (Sandbox Code Playgroud)
更好的是,为其引入一个漂亮的别名:
using MyFunction = std::function<void(int,int)>;
Run Code Online (Sandbox Code Playgroud)