本当の解決策は、std::string
および/または他の型で構成される新しい型を定義し、 Order-Id-class のインターフェースに関連するもののみを公開することだと思います。
OrderId::find_last_not_of(...)
たとえば、のすべてのユーザーにメソッドを公開することは良い考えだと本当に思いますOrderId
か?
それを使って構成し、タイプセーフにします:
class OrderId {
public:
...
foo frob () const {
... rawData_ ...
}
OrderId& operator++(); // prefix
OrderId operator++(int); // postfix
private:
std::string rawId_;
};
インターフェイスは YAGNI に従ってください。インターフェースを小さく保つことは、再利用可能で保守可能で堅牢なコードを作成する最大の秘訣であり、クライアント コードとはあまり関係がありません。
また、意味がある場合にのみ演算子をオーバーロードします。クライアントは、オーダー ID のインクリメントが何を意味するのかをすぐに説明できるはずです。たとえば、整数をインクリメントするのは理にかなっており、統計カウンターをインクリメントするのは理にかなっていますが、車をインクリメントするのは意味がありません。operator++
したがって、驚きを最小限に抑える方法をとって、意味があるかどうか、または代わりに名前付き関数を使用する必要があるかどうかを再考 してください。
OrderId successor (OrderId oid) {...}
OrderId predecessor (OrderId oid) {...}