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)
有什么想法,建议吗?
谢谢,狮子座
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在编译时才能知道这种情况.