2012-01-06 6 views
0

プリミティブ間のプリミティブのキャスト方法をユーザーが定義できますか?または、彼らがのユーザー定義型にキャストする方法は? (暗黙のキャストコンストラクター?yikes)プリミティブ型の暗黙のキャスト動作を定義することは可能ですか? C++

これは仮説的な質問であり、使い方を想像するのは難しいかもしれませんが、おそらくintがboolにキャストする方法に影響を与える可能性があります。

+0

? –

+0

私は代理ではなく、何か本当に不器用なことを考えていた。 5.doSomething(); – Praxeolitic

答えて

7

組み込みタイプの動作を変更することはできません。そのような言語を壊すことは許されません.の新しいoperator+をオーバーロードすることはできません。

言語は、基本的な動作に依存するライブラリを作成できるように、基本的な保証を行う必要があります。

あなたは、例えば、1つの引数で呼び出し可能ですコンストラクタ、提供することで、任意のタイプユーザー定義型へを変換することができます:今

struct Foo 
{ 
    Foo(T const &); 
    // ... 
}; 

あなたが言うことができ、T x; Foo y = x;などを

することができますまた、逆の操作を行うとあなたのクラスからの変換にを提供:

struct Foo 
{ 
    operator S() const; 
    // ... 
}; 

今、S s = y;と言うこともできます。

+0

新しいタイプのキャストを作成することもできます。 'checked_cast'を使用してそれらを使用します。 –

2

プリミティブを他のプリミティブにキャストする方法を変更することはできません。
conversion constructorを指定すると、ユーザー定義型をプリミティブ型/任意の型にキャストする方法を定義できます。

1

プリミティブ間のプリミティブのキャスト方法を定義できますか?

いいえ。言語は変更できません。

どのようにユーザー定義型にキャストするのですか? ( "暗黙的なキャストコンストラクタ" む?)

はい:まさにあなたの問題は、変換コンストラクタがされている何

struct X { 
    X() {} 
    X(int a) {} // implicit cast 
}; 

X x; 
x = 10; // int implicitly cast to X 
関連する問題