我正在努力提供一組需要結構感知的序列化方法。因此,我構建了一個類模板,爲所有繼承它的類提供這些方法。覆蓋模糊繼承
這是我現在所擁有的:
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>
?我應該考慮另一種方法嗎?
繼承在這裏看起來不太合適。粒子不是一個點。 –
我試過'struct particle:public serializable {point p;點v; };'但是這會導致一個結構,如果大小爲56而不是48 ......並且我不能接受不對齊的數據 –
Amxx