一个随机的问题...
我正在寻找的是一种表达转换操作的方法,该操作使用我要转换的类实例的已定义运算符,如果没有为该类型定义的转换运算符,则会生成编译时错误。因此,例如,我正在寻找的是类似的东西:
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<>,但是当您希望它失败时这可能会起作用(即:编译器选择一个允许转换为您要求的类型的运算符,当您想要失败时,因为该运算符不存在)。
诚然,这是一个不常见的情况,但令人讨厌的是我无法准确地表达我希望编译器在封装函数中执行的操作......因此这里有问题。