2009-07-15 3 views
4

Pythonでユーザ定義の__repr__を作成するにはどうすればよいですか?C++の文字列へのユーザ定義のキャスト(Pythonの__repr__など)

object1SomeClassであるとしましょう。機能があるとします(void function1(std::string))。 function1(object1)の呼び出しで、コンパイラがSomeClassをstd::stringにキャストするように何か(関数、メソッド、...)を定義する方法はありますか?

(私はにstringstreamバッファおよびオペレータ< <を使用することができることを知っているが、私はそのような仲介操作せずに方法を見つけるしたいと思います)

答えて

11

変換演算子を定義します。代入、演算子などです。そのため、暗黙的な変換でコードを読みにくくするのは簡単すぎるので、注意してください。

+0

注意: '__repr__'は慣用的なPythonであるかもしれませんが、上記のコードは慣用的なC++ではないので、賢明に使われなければコードの読者を混乱させます。 –

+0

編集:パベルの答えはもちろん完全に正しいです、それは私の警告サイレンを鳴らした '__repr__'の言及です:) –

7

変換演算子を使用します。このように: - 初期化で、これは関数呼び出しではないだけで動作しますが、どんな状況でコンパイラはstd::stringとタイプに一致するようにしようとするだろうということ

class SomeClass { 
public: 
    operator std::string() const { 
     return "SomeClassStringRepresentation"; 
    } 
}; 

注:

class SomeClass { 
public: 
    operator string() const { //implement code that will produce an instance of string and return it here} 
}; 
関連する問題