小编ara*_*rdi的帖子

使用模板返回值从函数中删除类型

我有以下课程:

class A {
public:
  virtual std::string Serialize();
  virtual void Deserialize(std::string);

  template <typename T>
  T* Clone()
  {
    std::string s = Serialize();
    T* t = new T();
    t->Deserialize(s);
    return t;
  }
};

class B : public A {
public:
  std::string Serialize() { ... }
  void Deserialize(std::string) { ... }
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要克隆B,我会执行以下操作:

B b1;
B* b2 = b1.Clone<B>();
Run Code Online (Sandbox Code Playgroud)

有没有办法删除模板类型而不Clone在每个派生类中重新实现?

我想要这样的东西:

B b1;
B* b2 = b1.Clone();
Run Code Online (Sandbox Code Playgroud)

c++ c++11

14
推荐指数
1
解决办法
488
查看次数

仅当 writer 进行更改时,golang 才会阻止 reader

我有一个 writer goroutine 和多个 reader goroutine。我想在作者更改数据时阻止读者。

package main

data []int

func main() {
    m := sync.Mutex{}

    for i := 0; i< 10; i++ {
        go func reader() {
            for {
                m.Lock()
                myData := data
                m.Unlock()
                read_from_data(myData)
            }
        }()
    }

    go func writer() {
        for {
            newData := new_data()
            m.Lock()
            data = newData
            m.Unlock()
            time.Sleep(1 * time.Seconds)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点而不让读者互相阻塞?

concurrency go

3
推荐指数
1
解决办法
1373
查看次数

标签 统计

c++ ×1

c++11 ×1

concurrency ×1

go ×1