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

时间:2011-12-30 10:06:50

标签: c++ macros

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

#define CATCH( doSomething )           \
    catch (MyException& e)             \
    {                                  \
        try                            \
        {                              \
            doSomething;               \
        }                              \
    }                                  \
    catch (MyException* e)             \
    {                                  \
        try                            \
        {                              \
            doSomething;               \
        }                              \
    }                         

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

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

1 个答案:

答案 0 :(得分:11)

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

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

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

并使用:

CATCH(                                 \
    std::cout << deref(e).toString();  \
)

虽然我不得不承认我看到没有的理由来动态分配异常对象。