我可以禁止在对象实例上调用静态方法吗?

Iva*_*van 15 c++ factory

我有一些有很多转换函数的类:

class Something {
  public:

    string toXml();
    string toJson();
    ...

    static Something fromXml(string);  // factory
    static Something fromJson(string); // factory
    ...
};
Run Code Online (Sandbox Code Playgroud)

因为可以在实例上调用静态函数,所以很容易编写如下代码:

Something sss;

... initializing sss ...

string xml1 = sss.toXml();
sss.fromXml(xml1); // does nothing
string xml2 = sss.toXml();
assert(xml1 == xml2); // always true
Run Code Online (Sandbox Code Playgroud)

所以我想禁止在对象上调用xXX,或者至少让它们做一些不同的事情.

有没有办法做到这一点?

小智 5

他们真的需要成为班级成员吗?防止这种情况的显而易见的方法是使它们成为自由函数.

  • 关于这一点:http://www.drdobbs.com/cpp/184401197谈论自由函数如何更好地进行封装. (4认同)

Pon*_*gge 0

相反,修改您的设计。将静态方法拆分为单独的 SomethingFactory 类。这真是令人困惑。