指针包装器类 - 表现得像原始指针一样

Leo*_*Leo 3 c++ oop design-patterns

我想要一个指针包装类,它就像一个原始指针,但也保存一个特殊的整数和指针(它来自的数组中的类型索引)

我设法让它的行为大多像指针.我知道指针比较解决方案可能不是最佳的,但这不是我的主要问题.我希望使用2个参数(指针,indexToArr)构造包装器,除非指针为NULL - 那么我不关心indexToArr.

我试图解决的问题是如何允许返回NULL就像普通指针允许一样.当前的解决方案使用ASSERT.但我想要一些在编译时工作的东西.一种专门模板方法的精神 - 只允许NULL作为参数.

当前版本:

class PtrWrapper
{
public:
    PtrWrapper(Type* ptr, int indToArr) 
        : m_ptr(ptr), m_indexToArr(indToArr){}

    //allow returning NULL, only NULL
    PtrWrapper(Type* ptr) : m_ptr(NULL), m_indexToArr(-1) {ASSERT(ptr == NULL);}

    Type* operator->() const {return m_ptr;}
    Type& operator*() const {return *m_ptr;}
    int IndexToArr() const {return m_indexToArr;}

    //for pointer comparison
    operator Type*() const {return m_ptr;}

private:
    Type* m_ptr;
    int m_indexToArr;
};
Run Code Online (Sandbox Code Playgroud)

有什么想法,建议吗?

谢谢,狮子座

ten*_*our 5

template<typename Type>
class PtrWrapper
{
    typedef struct { } NotType;
public:
    Ptr() { }
    Ptr(const NotType* nullPtr) { }
    Ptr(Type* p, int index) { }
};
Run Code Online (Sandbox Code Playgroud)

您可以利用literal NULL/ 0可以自动转换为任何指针类型的事实.创建一个NOT类型T,以及一个构造函数,它接受一个没有人会使用的类型的指针.现在你可以PtrWrapper<T> x(NULL);明确处理.

当然,正如其他人所说的那样,只有NULL在编译时才能知道这种情况.

  • @Leo /sf/ask/42862991/ BTW,因为你回到2011年你应该投资比特币 (2认同)