我正在尝试在Go中执行某些操作,类似于C ++的绑定。
在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()函数时,它将绑定用A的处理程序读取的B类成员函数。
然后调用m_A.func(hander)
,它将调用getData()
。然后将获得的数据解析为B::read(const string& data)
Go中有什么方法可以做到吗?如何在golang中创建转接呼叫包装器?
答案 0 :(得分:0)
我要针对自己的问题发布自己的解决方案:
我将go函数作为另一个函数的参数传递来进行回调。以下代码是上述C ++代码的改进版本。
在concat
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
}
中,A是B结构的成员
B.go