2

たとえば、ある型から別の型への変換が明示的なキャストによって利用できない場合、明示static_cast的な変換演算子を定義することは可能でしょうか?

編集

次の明示的な変換演算子を定義する方法を探しています。

class SmallInt {

public:

    // The Default Constructor
    SmallInt(int i = 0): val(i) {
        if (i < 0 || i > 255)
        throw std::out_of_range("Bad SmallInt initializer");
    }

    // Conversion Operator
    operator int() const {
        return val;
    }

private:
    std::size_t val;

};

int main()
{
     SmallInt si(100);

     int i = si; // here, I want an explicit conversion.
}
4

3 に答える 3

3

ユーザー定義型の場合、型キャスト演算子を定義できます。演算子の構文は次のとおりです。

operator <return-type>()

また、暗黙的な型キャスト演算子は、コンパイラに許容範囲を与えすぎて予期しない動作を引き起こす可能性があるため、一般的に嫌われていることも知っておく必要があります。代わりto_someType()に、クラスでメンバー関数を定義して、型変換を実行する必要があります。


これについてはよくわかりませんが、C++0x では、explicit暗黙的な型変換を防ぐために型キャストを指定できると思います。

于 2011-08-31T01:36:12.477 に答える
0

これが必要な場合は、変換演算子を定義できます。たとえば、次のようになります。

void foo (bool b) {}

struct S {
   operator bool () {return true;} // convert to a bool
};

int main () {
   S s;
   foo (s);  // call the operator bool.
}

このような暗黙的な変換は、一度定義すると、予期しない厄介な場所で発生する可能性があるため、実際にはお勧めしません。

于 2011-08-31T01:34:28.677 に答える