gpt4 book ai didi

go - Go中有没有类似于C++绑定(bind)的东西?

转载 作者:IT王子 更新时间:2023-10-29 02:20:35 31 4
gpt4 key购买 nike

我正在尝试在 Go 中做一些事情,类似于 C++ 的绑定(bind)。
在 C++ 中:

class A {
public:
typedef std::function<bool(const string&)> Handler;
bool func(A::Handler& handler) {
// getData will get data from file at path
auto data = getData(path);
return handler(data);
}
};

在另一个 B 类中:

Class B {
public:
bool run() {
using namespace std::placeholders;
A::Handler handler = bind(&B::read, this, _1);
m_A.initialize();
return m_A.func(handler);
}
bool read(const string& data) {
std::out << data << std::endl;
}
private:
A m_A {};
};

当B的run()函数被调用时,它会将B类的成员函数read与A的Handler绑定(bind)。然后调用m_A.func(hander),它会调用getData()。然后将获取的数据解析为 B::read(const string& data)

有没有办法在 Go 中做到这一点?如何在 golang 中创建转发调用包装器?

最佳答案

解决方案:

我针对我的问题发布了自己的解决方案:

我将 go 函数作为另一个函数的参数传递以执行回调。以下代码是上述 C++ 代码的 Go 版本。

A.go

type A struct {
//... some properties
}

type Handler func(string) bool
func (a *A) ReadRecords(handler Handler) bool {
// getData will get data from file at path
auto data = getData(path)
return handler(data)
}

func (a *A) Initialize() {
//... Initialization
}

B.go中,A是B结构体的成员

type B struct {
a A
//...other properties
}

var read A.Handler
func (b *B) Run() bool {
read = func(data string) {
fmt.Println(data)
}
b.a.Initialize()
return b.a.ReadRecords(read)
}

关于go - Go中有没有类似于C++绑定(bind)的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51620024/

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