gpt4 book ai didi

指向模板类的非静态成员函数的 C++ 函数指针(类成员)

转载 作者:行者123 更新时间:2023-11-30 04:11:53 25 4
gpt4 key购买 nike

我在弄清楚是否可以实现指向非静态成员函数的函数指针以在类本身中使用时遇到了一些问题。我有一个简化的代码,如下所示,当调用 Start 函数时,函数“func1”是一个静态成员函数,它可以正常工作:

Template<class F> 
class MyClass
{
public:
typedef void (*FuncPtrType)(float*);

void Start()
{
this->Run(Func1);
}

protected:
static void Func1(float arg[]){ // some code }

void Run(FuncPtrType func){ // some code }
}

所以我的问题是,是否有可能使“func1”成为非静态的?如果是这样,我需要做什么才能使其编译。我尝试了以下代码:

Template<class F> 
class MyClass
{
public:
typedef void (*FuncPtrType)(float*);

void Start()
{
this->Run(&MyClass<F>::Func1);
}

protected:
void Func1(float arg[]){ // some code }

void Run(FuncPtrType func){ // some code }
}

它在编译中抛出错误,例如:错误 c2664:...无法从“void (MyClass::*)(float*)”转换为“void (__cdecl *)(float *)”

最佳答案

您应该简单地更改 typedef

typedef void (MyClass::*FuncPtrType)(float*);

您的代码不起作用,因为指向函数的指针!= 指向成员函数的指针。

关于指向模板类的非静态成员函数的 C++ 函数指针(类成员),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20041661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com