ランダムな質問のようなもの...
私が探しているのは、キャスト元のクラス インスタンスの定義済み演算子を使用するキャスト操作を表現する方法であり、型に定義済みキャスト演算子がない場合はコンパイル時エラーを生成します。たとえば、私が探しているのは次のようなものです。
template< typename RESULT_TYPE, typename INPUT_TYPE >
RESULT_TYPE operator_cast( const INPUT_TYPE& tValue )
{
return tValue.operator RESULT_TYPE();
}
// Should work...
CString sString;
LPCTSTR pcszString = operator_cast< LPCTSTR >( sString );
// Should fail...
int iValue = 42;
DWORD dwValue = operator_cast< DWORD >( iValue );
興味深い補足: 上記のコードは VS2005 C++ コンパイラをクラッシュさせ、VS2008 C++ コンパイラでは正しくコンパイルされません。これは、コンパイラのバグであると推測していますが、うまくいけばアイデアを示しています。
この効果を達成する方法を知っている人はいますか?
編集:これを使用する理由を説明するためのより多くの理論的根拠。型をカプセル化または抽象化することになっているラッパー クラスがあり、それをカプセル化された型にキャストしているとします。static_cast<> を使用することもできますが、失敗させたい場合に機能する可能性があります (つまり、コンパイラーは、要求した型に変換できる演算子を選択します。その演算子が存在しないために失敗したい場合)。
確かに、これはまれなケースですが、カプセル化された関数でコンパイラに実行してもらいたいことを正確に表現できないのは面倒です...したがって、ここで質問します。