gpt4 book ai didi

c++ - 覆盖不明确的继承

转载 作者:太空狗 更新时间:2023-10-29 23:50:29 24 4
gpt4 key购买 nike

我正在努力提供一组需要结构感知的序列化方法。因此,我构建了一个类模板,为所有从它继承的类提供这些方法。

这是我现在拥有的:

template<typename T>
class serializable
{
protected:
serializable() = default;
public:
size_t size_of() { return sizeof(T); }
void dump(void* data) { std::memcpy(data, this, serializable<T>::size_of()); }
void load(void* data) { std::memcpy(this, data, serializable<T>::size_of()); }
virtual void serialize()
{
std::cout << "Default serialize : size " << serializable<T>::size_of() << std::endl;
}
};

struct point : public serializable<point>
{
float p[3];
};
struct particle : public point, public serializable<particle>
{
float v[3];
};

int main()
{
particle p;
p.serialize();

return 0;
}

问题是在调用 p.serialize 时,编译器在 serializable<point>::serialize() 之间发出不明确的重载错误和 serializable<particle>::serialize() .

我该如何解决这个问题?有什么方法可以覆盖 serializable<point> 的继承吗?只考虑serializable<particle> ?我应该考虑另一种方法吗?

最佳答案

你可以引入你想要的serialize:

struct particle : public point, public serializable<particle>
{
using serializable<particle>::serialize;
float v[3];
};

但您可能只想使用组合:

struct particle : public serializable<particle>
{
point p;
float v[3];
};

关于c++ - 覆盖不明确的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951621/

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