gpt4 book ai didi

C++:如何调用属于同一类的成员函数指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:46 24 4
gpt4 key购买 nike

我试图通过允许我选择不同形式的数学函数并通过将它们实例化为某个类的对象来改变它们的参数,从而在我的数字中实现更大的灵 active 。该类(class)包括我可以选择的某些数学函数以及我可以改变的参数。类的构造函数根据我想要的什么数学函数,在类中设置一个成员函数指针指向一个成员函数。我只想通过在我的例程中直接使用指针来使用指针来调用它指向的任何函数。

然而,事实证明这令人望而生畏,因为我不知道成员函数指针需要特定的语法,而且根据我收集到的信息,它的工作方式似乎与常规函数指针有些不同。我已经做了很多实验,并为自己构建了一个下面共享的最小示例。

#include<iostream>
#include<string.h>
#include<cstdlib>
#include<stdio.h>

class Someclass
{
public:
// constructor to set pointer
Someclass(std::string);

// member function pointer to hold functions
void (Someclass::*fptr)();

// auxiliary function to call testfunction via pointer
void call ();

// testfunction
void foo();
};

// testfunction
void Someclass::foo()
{
printf("foo says hi! \n");
}

// call via specific function
void Someclass::call()
{
(this->*fptr)();
}

// constructor
Someclass::Someclass(std::string name)
{
if(name=="foo")
{
this->fptr = &Someclass::foo;
}
}


int main()
{
Someclass someobject("foo");

someobject.foo(); // direct testfunction call: Works OK
someobject.call(); // call via auxiliary function: Works OK
//(someobject.*fptr)(); // direct pointer dereferencing: Gives Error

return(EXIT_SUCCESS);
}

它表明我可以通过使用另一个成员函数来访问指针,该成员函数仅通过使用 this 指针调用指针指向的任何内容。但是,如果我尝试通过该行直接在我的主函数中使用指针,我似乎仍然无法使函数调用工作,

(someobject.*fptr)()

这个特定的表达式导致我的编译器提示作用域,如果我包含类作用域,编译器会提到非静态成员的无效使用。尽管如此,我还是很困惑为什么我的实现在这里不起作用,如果它起作用,我的问题中的正确语法将如何以及为什么必须如此。

任何见解将不胜感激。

最佳答案

fptr 是对象的成员,而不是 main 的局部变量。在这方面,成员函数指针的行为与所有其他变量类型完全相同。你是如此接近,只需要用对象名称限定函数指针名称:

(someobject.*(someobject.fptr))();

关于C++:如何调用属于同一类的成员函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633594/

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