指向类成员函数的指针,作为外部函数的参数
Pointer to class member function as an argument to external function
我试图实现OpenGL库的一些类方法,但我在函数指针方面遇到了问题。无论如何,假设我们有C++代码:
int funct1(int x){
return x*x;
}
class foo{
public:
int funct2(int x){
return x*x;
}
};
int conv(int (*f)(int)){
return f(1);
}
int main(){
conv(funct1);
foo bar;
conv(funct2);
}
我确实意识到funct2是foo类的内部方法,但试图将conv(funct2)更改为类似conv(bar.funct2)的方法会出现以下错误:
argument of type ‘int (foo::)(int)’ does not match ‘int (*)(int)’
我试着在其他类似的帖子中寻求帮助,但总是很复杂。有人可以在这里张贴更改后的工作代码吗?
将funct2声明为静态
int funct1(int x){
return x*x;
}
class foo{
public:
static int funct2(int x){
return x*x;
}
};
int conv(int (*f)(int)){
return f(1);
}
int main(){
conv(funct1);
foo bar;
conv(foo::funct2);
}
如果您的编译器支持c++11,您可以执行以下操作:
#include<functional>
int funct1(int x){
return x*x;
}
class foo{
public:
int funct2(int x){
return x*x;
}
};
int conv(int (*f)(int)){
return f(1);
}
int main(){
conv(funct1);
foo bar;
auto boundFunct2 = std::function<int(int)>(std::bind(&foo::funct2,bar,std::placeholders::_1));
conv(boundFunct2.target<int(int)>());
}
基本上,您将funct2绑定到类的一个实例,即bar,然后从中创建一个函数对象。为了使其生成conv()所需的签名,您可以调用函数对象上的目标成员。
好处是你不必更改任何函数或类,我假设你不能更改,因为它们可能是openGL库对象。
我找到了解决这个问题的好方法:
class MyClass;
static MyClass* ptr;
class MyClass{
void Func(){something;}
static void Func2(){ptr->Func();}
void RunFunc(){
ptr=this;
RunningExternalFunction(Func2);
}
};
哇!
相关文章:
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- C++:函数外部的超时功能
- 如何在函数外部访问函数中局部变量的值?
- 在成员函数外部封闭类的定义中需要默认成员初始值设定项
- 以延长构造函数外部 QT 对象的生存期
- 全局静态变量不"staying defined"函数外部
- C++ 函数外部丢失的指针对象
- 向量大小在构造函数外部恢复为 0
- 删除函数外部的实例化对象
- 在函数外部编写代码
- 为什么我不能添加到方法/函数外部的 ostringstream
- 用于在方法或函数外部声明的变量的内存
- SDL2 在函数外部加载字体会引发错误
- 如何在具有多态性的函数外部创建对象
- 在函数外部声明对象,将其作为引用传递,然后在函数内部创建它
- 向量未在函数C++外部更新
- 访问函数外部的堆栈对象
- 在c++中访问函数外部的数组
- 如何更新函数外部的数组(指向指针)