C++找出变量是引用还是指针

suk*_*mel 4 c++ macros

比方说,我在代码的catch部分有一个宏

#define CATCH( doSomething )           \
    catch (MyException& e)             \
    {                                  \
        try                            \
        {                              \
            doSomething;               \
        }                              \
    }                                  \
    catch (MyException* e)             \
    {                                  \
        try                            \
        {                              \
            doSomething;               \
        }                              \
    }                         
Run Code Online (Sandbox Code Playgroud)

doSomething部分我需要获取异常的内容,有没有办法做到这一点?一些函数isPointer可以像这样使用:

try
{
    THROW(new MyException());
}
CATCH(                                 \
    if( isPointer(e) )                 \
    {                                  \
        std::cout << (*e).toString();  \
    }                                  \
    else                               \
    {                                  \
        std::cout << e.toString();     \
    }                                  \
)
Run Code Online (Sandbox Code Playgroud)

Xeo*_*Xeo 11

只需使用重载可能取消引用该参数:

template<class T>
T& deref(T* p) { return *p; }

template<class T>
T& deref(T& r) { return r; }
Run Code Online (Sandbox Code Playgroud)

并使用:

CATCH(                                 \
    std::cout << deref(e).toString();  \
)
Run Code Online (Sandbox Code Playgroud)

虽然我不得不承认我没有理由动态分配异常对象.

  • +1'没有理由动态分配异常对象'. (2认同)