tengo clase con una gran cantidad de funciones de conversión:¿Puedo prohibir llamar a métodos estáticos en instancia de objeto?
class Something {
public:
string toXml();
string toJson();
...
static Something fromXml(string); // factory
static Something fromJson(string); // factory
...
};
Dado que las funciones estáticas pueden ser llamados ejemplo, es fácil escribir código como este:
Something sss;
... initializing sss ...
string xml1 = sss.toXml();
sss.fromXml(xml1); // does nothing
string xml2 = sss.toXml();
assert(xml1 == xml2); // always true
por lo que quiero prohibir a llamar fromXXX en objetos, o al menos hacer que hagan algo diferente.
¿Hay alguna manera de hacerlo?
¿No debería el compilador advertir si se está llamando a una función estática en un objeto? Dependiendo de su entorno, ¿quizás puede agregar banderas de #pragma o del compilador para forzar que la advertencia sea un error? – Macke
@Marcus: Eso es válido C++. Si pudiera forzar una advertencia sobre esto, sería suficiente para mí. Pero parece imposible. – Ivan