2011-11-15 6 views
1

私は自分の文字列クラス(DinString)を持っていますが、何も特別なものはありません。私が思っていた は、あなたがあなたのために、この変換を行うためのコンストラクタを定義することができ、この文字列を暗黙的に文字列にキャスト

DinString a= "Helo World"; 

bool Func(DinString string); 

Func("test"); 

答えて

3

ような何かを行うことが可能である:

class DinString { 
    DinString(const char *string) { 
    // do something useful here 
    } 
}; 

DinString a= "Helo World";は(外見にもかかわらず)の割り当てではありませんので、これは動作し、実際に書くことと等価ですDinString a("Hello World");

1

はい入力としてconst char *あなたのクラスの変換コンストラクタを提供します。

DinString::DinString(const char *); 
6

はい、あります。単純に適切な(!非explicit)コンストラクタを実装:

class DinString { 
public: 
    DinString(const char *s) { 
     // ... 
    } 
}; 

あなたが「連鎖」このような複数のコンストラクタた場合、これは動作しませんのでご注意ください。たとえば、次のようなは機能しません。

class DinString { 
public: 
    DinString(const char *s) { 
     // ... 
    } 
}; 

class FooString { 
public: 
    FooString(const DinString &) { } 
}; 

void f(const FooString &) { } 

f("hello"); // doesn't call FooString(DinString("hello!")); ! 
関連する問題