指针包装类-行为就像一个原始指针
pointer wrapper class - behave just like a raw pointer
我想要一个指针包装器类,它的行为就像一个原始指针,但也保存一个特殊的整数随着指针(类型的索引在数组它来自)
我设法让它的行为主要像一个指针。我知道,指针比较解决方案可能不是最优的,但这不是我的主要问题。我想用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;
};
有什么想法和建议吗?
谢谢,狮子座
template<typename Type>
class PtrWrapper
{
typedef struct { } NotType;
public:
Ptr() { }
Ptr(const NotType* nullPtr) { }
Ptr(Type* p, int index) { }
};
您可以利用字面量NULL
/0
可以自动转换为任何指针类型的事实。创建一个不是T
的类型,和一个构造函数,它接受一个指向那个没有人会使用的类型的指针。现在可以显式地处理PtrWrapper<T> x(NULL);
了。
当然,正如其他人所说,这只会在编译时知道NULL
的情况下工作。
简单地创建一个没有参数的默认构造函数,将指针初始化为NULL,但请确保在operator*
和operator->
中对NULL指针进行一些检查。
执行以下操作:
PtrWrapper(Type* ptr) : m_ptr(ptr), m_indexToArr(0) {ASSERT(ptr != NULL);}
PtrWrapper() : m_ptr(NULL), m_indexToArr(-1) {ASSERT(ptr == NULL);}
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 引用一个已擦除类型(void*)的指针
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将指针从一个void函数传递到另一个C++
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 不明白迭代器,引用和指针失效,一个例子
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 将指针分配给另一个指针时会发生什么情况?
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++将一个指针分配给另一个指针时执行的类型检查
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 取消引用结束指针到数组类型的一个
- 更改一个指针后更改乘法对象
- const和指针(一个节点示例)
- 从函数返回指针.一个指针的值未更新