Specific C++ Macro
Specific C++ Macro
我想要一个C++宏,它可以变成这样的东西:
safe_cast<Type>(object)
到
Assert(dynamic_cast<Type>(object))
这可能吗?
我可以使用: safe_cast(Type, object)
,但这不是我所追求的。
这不能是一个宏,但肯定是一个函数模板就可以了:
template <class U, class T>
U safe_cast(T *const obj) {
auto * const p = dynamic_cast<U>(obj);
assert(p);
return p;
}
像使用指针dynamic_cast
一样调用。
不要使用宏。我们没有理由不能在这里使用模板函数,所以我们应该这样做!
template <typename T, typename U>
T safe_cast_helper( U& u, std::true_type )
{
try {
return dynamic_cast<T>(u);
}
catch (std::bad_cast& e)
{
assert( false && "Exception thrown!" ); // Or something better!
}
}
template <typename T, typename U>
T safe_cast_helper( U& u, std::false_type )
{
auto ptr = dynamic_cast<T>(u);
assert( ptr );
return ptr;
}
template <typename T, typename U>
T safe_cast( U& u )
{
return safe_cast_helper<T>( u, std::is_reference<T>::type() );
}
你可以像平时一样使用它 dynamic_cast
,带有引用或指针。但是,我建议稍微改进错误报告!也许在断言之前写日志或其他东西是谨慎的。
相关文章:
- LPWSTR typedef and macro?
- 如何修复MSVC++(Microsoft Visual studio)中"macro overloading"的可变参数宏相关问题?
- CALLBACK macro (QT)
- Specific C++ Macro
- QT Macro q_slots'''类访问限制之后
- 如何在Macro BranchCallback中固定界限/更改变量界限?C
- Qt with Visual Studio macro issue
- Replacing __LINE__ macro
- how to #define c++ STL macro
- CMake C/C++ macro generating
- 为什么海湾合作委员会声称我违反了"at least one argument for variadic macro",而我至少有一个论点?
- c++ macro containing Q_OBJECT
- Mutex Protect Macro
- 动态变量上的c++MACRO未声明标识符
- Variadic Macro without __VA_ARGS__
- #ifdef macro
- Handling c++ wxWidgets EVT_MAXIMIZE macro
- 是“ Gnu-Zero-variadic-Macro-arguments”可靠地忽略
- MACRO取决于其文件夹位置
- Overloading a macro