文字列に変換したいクラスを作成しています。toString関数または(std :: string)C++のキャストオーバーロード
std::string toString() const;
またはこのような:
operator std::string() const;
より受け入れられているどのような方法
は、私はこのようにそれを行うべきか?
文字列に変換したいクラスを作成しています。toString関数または(std :: string)C++のキャストオーバーロード
std::string toString() const;
またはこのような:
operator std::string() const;
より受け入れられているどのような方法
は、私はこのようにそれを行うべきか?
標準ライブラリ(たとえばstd :: stringstreamなど)で「文字列」表現を持つクラスは、テキストを返すメンバ関数として.str()
を使用します。クラスをジェネリックコードにも使用できるようにするには、同じコンベンション(toString
が「Javanese」、ToString
「Sharpish」)を使用することをお勧めします。
変換演算子の使用については、クラスが文字列式の文字列とインターワークするように特別に設計されている場合にのみ意味があります(int
が暗黙的にとなるような文字列への変換は実際には "プロモーション"
クラスが文字列に「降格」した場合(その際に情報が失われる)、キャスト演算子を明示的に(explicit operator std::string() const
)持つことをお勧めします。
文字列のセマンティクスとは関係がなく、ときどき変換する必要がある場合は、明示的に名前付きの関数を使用することを検討してください。
あなたのクラスは、文字列とは何の関係もありませんが、唯一のI/Oに参加する必要がある場合:a
が可変である場合、あなたはその使用について考える必要が意味がある、ということ
注意、その後、
std::cout << a;
std::stringstream ss;
ss << a; // this makes a-to-text, even respecting locale informations.
...文字列に変換するには、しかし、あなたが行うことができますように...
friend std::ostream& operator<<(std::ostream& stream, const yourclass& yourclass)
によって、ストリームへの書き込みにないアイデアを考えます
...おそらく文字列関連のメモリを割り当てる必要はありません。
"toString'は" * Javanese * "または" * Sharpish * "" - "Javanese"のみです。 C#(実際には.NET)は 'ToString'を使用します。 – hvd
@hvd:あなたにタンク。一定。 –
C++ 11を使用していますか?その場合は、明示的キャスト演算子を使用できます。それ以外の場合は、前者(C++ 98またはC++ 03)を使用してください。 –
@CodyGray私のタグを修正しました – tomgrin10
積分型と算術データ型のために 'std :: to_string'があるからといって、' std :: string to_string(const Type&) 'という自由な関数も考えてみましょう。あなたのクラスと同じ名前空間に保管してください。 – Maikel