gpt4 book ai didi

c++ - 尽管需要函数指针,但使用函数对象

转载 作者:行者123 更新时间:2023-11-28 08:14:10 24 4
gpt4 key购买 nike

我必须使用一些需要函数指针的遗留代码,比方说:

void LEGACY_CODE(int(*)(int))
{
//...
}

但是我拥有的功能是在仿函数中:

struct X
{
Y member;
X(Y y) : member(y)
{}

int operator()(int)
{
//...
}
};

我应该如何修改/包装类 X 以便 LEGACY_CODE 可以访问 X::operator()(int) 中的功能?

最佳答案

你的问题毫无意义。 你想给谁的接线员打电话?

X a, b, c;

LEGACY_CODE(???); // what -- a(), b(), or c()?

所以,简而言之,你不能。成员函数 X::operator() 不是类单独的属性,而是绑定(bind)到类型为 X对象实例>.

在此站点上搜索“成员函数”和“回调”,以了解相关问题的可能方法范围。


提供免费功能的最粗鲁且使用起来很可能不安全的解决方法如下:

X * current_X;  // ugh, a global
int dispatch(int n) { current_X->operator()(n); }

int main()
{
X a;
current_X = &a;
LEGACY_CODE(dispatch);
}

你可以看到这是怎么回事......

关于c++ - 尽管需要函数指针,但使用函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184911/

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