tôi có lớp học với rất nhiều chức năng chuyển đổi:Tôi có thể cấm gọi các phương thức tĩnh trên cá thể đối tượng không?
class Something {
public:
string toXml();
string toJson();
...
static Something fromXml(string); // factory
static Something fromJson(string); // factory
...
};
Bởi vì chức năng tĩnh có thể được gọi vào dụ, nó rất dễ dàng để viết mã như thế này:
Something sss;
... initializing sss ...
string xml1 = sss.toXml();
sss.fromXml(xml1); // does nothing
string xml2 = sss.toXml();
assert(xml1 == xml2); // always true
Vì vậy, tôi muốn cấm gọi từXXX trên các đối tượng hoặc ít nhất khiến chúng làm điều gì đó khác biệt.
Có cách nào để thực hiện việc này không?
Không nên trình biên dịch cảnh báo nếu một hàm tĩnh đang được gọi trên một đối tượng? Depedning trên môi trường của bạn, có lẽ bạn có thể thêm #pragma hoặc cờ trình biên dịch để buộc cảnh báo đó là một lỗi? – Macke
@Marcus: Đó là hợp lệ C++. Nếu tôi có thể buộc cảnh báo về điều này, nó sẽ là đủ cho tôi. Nhưng có vẻ như không thể. – Ivan