2018-07-31 18:39
浏览 47

Go中是否有类似于C ++绑定的内容?

I'm trying to do something in Go, similar to C++'s bind.
In C++ :

class A {
    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);

In another class B:

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

when B's run() function is called, it will bind class B member function read with A's Handler. Then m_A.func(hander) is called, it will call getData(). The data got is then parsed to B::read(const string& data)

Is there any way to do it in Go? How to create a forwarding call wrapper in golang?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douguio0185 2018-08-06 20:20


    I'm posting my own solution for my question:

    I am passing go function as a parameter of another function to do the callback. The following code is a go version of the above C++ code.

    In 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

    In B.go, A is a member of B struct

    type B struct {
        a    A
        //...other properties
    var read A.Handler
    func (b *B) Run() bool {
        read = func(data string) {
        return b.a.ReadRecords(read)
    点赞 打赏 评论

相关推荐 更多相似问题