我有以下课程:
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) 我有一个 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)
我怎样才能做到这一点而不让读者互相阻塞?