resueltos - programacion orientada a objetos c++
Herencia de C++ a través de la advertencia de dominación (1)
Estoy tratando de implementar un objeto bastante grande que implementa muchas interfaces. Algunas de estas interfaces son puramente virtuales. Puede que tenga un problema en la herencia de diamantes. Visual Studio informa una advertencia de C4250 (''class1'' : inherits ''class2::member'' via dominance)
. En primer lugar, estas clases se heredan prácticamente como debería ser. El siguiente es el diseño de clase parcial que causa este problema.
A B C
/ / / /
/ / / /
AB BC
| |
| BC2
| |
/ D: Implementation of B, C, BC, BC2
/ /
Big
En este árbol completo, solo D implementa métodos virtuales, no hay otra definición del método en cuestión. Y todos los métodos virtuales de B aparecen en las advertencias. Si es importante, D es una clase completa.
Leí que esto sucede con la serialización de Boost y es seguro ignorar la advertencia.
¿Este método que intento lograr es válido? ¿Es seguro ignorar esta advertencia?
Nota 1: Esto no es un duplicado del Visual Studio Compiler que advierte C4250 (''class1'': hereda ''class2 :: member'' mediante el dominio) , he intentado con la solución propuesta allí.
Nota 2: también puedo enviar diagramas de clase, pero es un poco más complicado que esto.
EDITAR: advertencia completa es la siguiente:
warning C4250: ''gge::resource::ImageResource'' : inherits
''gge::graphics::ImageTexture::gge::graphics::ImageTexture::drawin''
via dominance
gge::resource::ImageResource
es grande en el dibujo, gge::graphics::ImageTexture
es D, drawin es uno de los seis métodos por los que recibo advertencias.
Todo es absolutamente válido. Un compilador puede advertir sobre un código válido, no hay problema aquí. Puede intentar silenciar la advertencia con una declaración de using
. Si esto no funciona (probablemente debido a un error de MSVC), silencíelo con un pragma
.