代码之家  ›  专栏  ›  技术社区  ›  Theo Walton

从指针访问值或获取其默认值(如果为空)的最干净方法

c++
  •  0
  • Theo Walton  · 技术社区  · 5 年前

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

    如:

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

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

    但是我有一个宏,我非常讨厌在c中使用宏++

    1 回复  |  直到 5 年前
        1
  •  3
  •   Jarod42    5 年前

    只需创建一个函数而不是宏,例如:

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

    不过,电话有点不同:

    safe_dereference(somePointer, &MyClass::MyMember);