从指针访问值或获取其默认值(如果为null)的最简洁方法

时间:2019-06-01 02:01:03

标签: c++

我有一个指向结构的指针,如果指针为null,我想获取该结构的成员或该结构的默认构造成员。有没有很好的捷径可以做到这一点?我想到实现这种atm的唯一方法是使用宏

例如:

#define safe_dereference(X, Y) (X ? X->Y : decltype(X->Y)())

此代码段是在堆栈溢出中编写的,未经测试

但是我有一个宏,我真的很讨厌在c ++中使用宏

1 个答案:

答案 0 :(得分:3)

只需创建一个函数而不是MACRO,就像这样:

template <typename C, typename M>
M safe_dereference(const C* c, M (C::*member))
{
    return c ? c->*member : M();
}

通话有点不同:

safe_dereference(somePointer, &MyClass::MyMember);