return const 和非 const 包装器对象
return a const and non const wrapper object
如果我想要自定义容器 class 通过类似迭代器的对象(实际上充当容器中某些数据的包装器)来访问其数据,并且我希望能够同时获得两者一个 const 和一个非 const 类似迭代器的对象,一个只允许读取,一个只允许读取和写入,所以我必须实现两个不同的类似迭代器的对象;一种只允许读取,一种允许读取和写入,或者我可以将此功能包装在一个对象中。
问题是我必须 return 这个对象的值,但我不能 return 不能直接放入非 const 变量的按值对象,比如
const accessor container::getConstAccessor(){/**/}
像
一样被滥用
accessor a=myContainer.getConstAccessor(); //effectively giving me a non const
我能看到的唯一解决方案是有两个访问器classes/structs。一种行为 const,一种行为 readWrite,无论它们是在 const 还是非 const 变量中。
这可能模拟了一个 constIterator 和迭代器,但这真的需要吗?您不能从容器中创建 one 访问器和 return const 或非 const 版本吗?
我试过几次改写这个问题,使其最笼统,但如果它有意义,我不完全确定。我希望如此。
Can you not make one accessor and return either a const or non const version from the container?
不是真的。首先,您需要两个访问器,因为您必须检测 *this
是否符合 const
条件:
/* ??? */ my_container::getAccessor();
/* ??? */ my_container::getAccessor() const;
然后,如果您按值 return,则无法强制 getAccessor
的调用者将 return 值存储在 const
中多变的。这就是为什么如果你想在 const
限定的访问器中强制执行不变性,你需要两种不同的类型:
accessor my_container::getAccessor();
const_accessor my_container::getAccessor() const;
根据可以用 [=20= 实例化的某些模板 accessor_impl<T>
class 同时实现 accessor
和 const_accessor
很可能可以避免代码重复]/const T
.
如果我想要自定义容器 class 通过类似迭代器的对象(实际上充当容器中某些数据的包装器)来访问其数据,并且我希望能够同时获得两者一个 const 和一个非 const 类似迭代器的对象,一个只允许读取,一个只允许读取和写入,所以我必须实现两个不同的类似迭代器的对象;一种只允许读取,一种允许读取和写入,或者我可以将此功能包装在一个对象中。
问题是我必须 return 这个对象的值,但我不能 return 不能直接放入非 const 变量的按值对象,比如
const accessor container::getConstAccessor(){/**/}
像
一样被滥用accessor a=myContainer.getConstAccessor(); //effectively giving me a non const
我能看到的唯一解决方案是有两个访问器classes/structs。一种行为 const,一种行为 readWrite,无论它们是在 const 还是非 const 变量中。
这可能模拟了一个 constIterator 和迭代器,但这真的需要吗?您不能从容器中创建 one 访问器和 return const 或非 const 版本吗?
我试过几次改写这个问题,使其最笼统,但如果它有意义,我不完全确定。我希望如此。
Can you not make one accessor and return either a const or non const version from the container?
不是真的。首先,您需要两个访问器,因为您必须检测 *this
是否符合 const
条件:
/* ??? */ my_container::getAccessor();
/* ??? */ my_container::getAccessor() const;
然后,如果您按值 return,则无法强制 getAccessor
的调用者将 return 值存储在 const
中多变的。这就是为什么如果你想在 const
限定的访问器中强制执行不变性,你需要两种不同的类型:
accessor my_container::getAccessor();
const_accessor my_container::getAccessor() const;
根据可以用 [=20= 实例化的某些模板 accessor_impl<T>
class 同时实现 accessor
和 const_accessor
很可能可以避免代码重复]/const T
.