我正在编写一个类的程序,其中基本问题是使用无符号整数向量,按位运算来模仿bool向量,但使用的内存要少得多。
要使operator []同时作为r值和l值工作,需要一个bitproxy结构,它在代码调用operator []和向量中的所需位之间进行调解。
教授包含了BitArray的接口,它将其声明为模板类,但在引用bitproxy时,没有使用模板。
这样的事情:
template < class IType = unsigned int >
class BitArray {
vector<IType> list;
int array_size;
public:
...
functions()
...
bitproxy operator[](size_t);
...
}
bitproxy需要访问BitArray的功能,这可以通过将其声明为朋友来从BitArray端轻松完成,但是如果没有相同的模板,bitproxy无法保持对BitArray的引用。这就是问题所在。
例如:
struct bitproxy{
BitArray& bitarray;
size_t pos;
template < class IType >
bitproxy(BitArray<IType>& bitarray, size_t pos)
: ITypeT(IType), bitarray(bitarray), pos(pos);
...
}
低估了BitArray&amp; bitarray
和
struct bitproxy{
template < class IType >
BitArray<IType>& bitarray;
size_t pos;
template < class IType >
bitproxy(BitArray<IType>& bitarray, size_t pos)
: ITypeT(IType), bitarray(bitarray), pos(pos);
...
}
过度定义BitArray&amp; bitarray
我的教授是否犯了错误,并为bitproxy留下了模板,或者我是否错过了如何引用模板对象?
我是否需要向bitproxy添加模板,或者没有它可以做到吗?