gpt4 book ai didi

c++ - 在 C++ 中从派生类调用未在基类上定义的成员函数是否安全?

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

我正在阅读有关委托(delegate)的内容,我希望能够在基类中调用任何作为参数传递的函数,具体取决于事件,因此,例如,如果我有一个解析器对象,并且我想从另一个对象中分配要调用的方法取决于找到什么 token 。我按照下面的方法做了,它有效但我不确定它是否是正确的方法或者它是否也像可移植的那样。

class base{
public:
typedef void (base::*methodPTR)();
methodPTR pfn;

void setMethod(methodPTR fn)
{
pfn = fn;
}
void run(){
if(pfn) (this->*pfn)();
}
};

class a : public base {
public:
};

class b : public base
{
a ob;
public:
void init()
{
//this function fn is not define neither in object "a" or "base"
//but still I can assign arbitrary member function just like I wanted
ob.setMethod(static_cast<base::methodPTR>(&b::fn));
}

void fn()
{
cout << "from class b!" << endl;
}

void test()
{
ob.run();
}
};

int _tmain(int argc, _TCHAR* argv[])
{
b x;
x.init();
x.test();

return 0;
}

最佳答案

只要你确定你永远不会在一个不是指针来自的类型之一的对象上调用成员指针,那么你正在做的事情就是安全的(即你不调用 a::xbase 上。

关于c++ - 在 C++ 中从派生类调用未在基类上定义的成员函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359668/

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