2016-12-17 7 views
1

文字列に変換したいクラスを作成しています。toString関数または(std :: string)C++のキャストオーバーロード

std::string toString() const; 

またはこのような:

operator std::string() const; 

より受け入れられているどのような方法

は、私はこのようにそれを行うべきか?

+2

C++ 11を使用していますか?その場合は、明示的キャスト演算子を使用できます。それ以外の場合は、前者(C++ 98またはC++ 03)を使用してください。 –

+0

@CodyGray私のタグを修正しました – tomgrin10

+1

積分型と算術データ型のために 'std :: to_string'があるからといって、' std :: string to_string(const Type&) 'という自由な関数も考えてみましょう。あなたのクラスと同じ名前空間に保管してください。 – Maikel

答えて

2

標準ライブラリ(たとえばstd :: stringstreamなど)で「文字列」表現を持つクラスは、テキストを返すメンバ関数として.str()を使用します。クラスをジェネリックコードにも使用できるようにするには、同じコンベンション(toStringが「Javanese」、ToStringSharpish」)を使用することをお勧めします。

変換演算子の使用については、クラスが文字列式の文字列とインターワークするように特別に設計されている場合にのみ意味があります(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) 

によって、ストリームへの書き込みにないアイデアを考えます

...おそらく文字列関連のメモリを割り当てる必要はありません。

+0

"toString'は" * Javanese * "または" * Sharpish * "" - "Javanese"のみです。 C#(実際には.NET)は 'ToString'を使用します。 – hvd

+0

@hvd:あなたにタンク。一定。 –

関連する問題