C++ 模板类的代理结构
我正在为一个类编写一个程序,这个类的基本问题是使用无符号整数的向量,以及模拟布尔向量的逐位运算,但使用的内存要少得多 要使运算符[]同时用作r值和l值,需要一个bitproxy结构,它在代码调用运算符[]和向量中所需的位之间进行调解 教授包括BitArray接口,该接口将其声明为模板类,但在引用bitproxy时,不使用模板 比如说:C++ 模板类的代理结构,c++,templates,struct,C++,Templates,Struct,我正在为一个类编写一个程序,这个类的基本问题是使用无符号整数的向量,以及模拟布尔向量的逐位运算,但使用的内存要少得多 要使运算符[]同时用作r值和l值,需要一个bitproxy结构,它在代码调用运算符[]和向量中所需的位之间进行调解 教授包括BitArray接口,该接口将其声明为模板类,但在引用bitproxy时,不使用模板 比如说: template < class IType = unsigned int > class BitArray { vector<ITyp
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);
...
}
欠定义位数组和位数组
及
过定义位数组&位数组
我的教授是否犯了一个错误,遗漏了bitproxy的模板,或者我错过了如何引用模板对象
我是否需要向bitproxy添加模板,或者是否有办法不添加模板?我怀疑bitproxy是BitArray中的嵌套类。这样,它就有效地绑定到外部类的模板参数。对于每个BitArray实例化,都会有一个对应的BitArray::bitproxy。至少,我会这样做。它在同一个文件中,但不在同一个范围内,因为组织的原因。那会有区别吗?谢谢伊戈尔,成功了。谢谢伊戈尔,成功了。另一个子问题。接口中的bitproxy运算符[]size\u t在声明中变为自动BitArray::运算符[]size\u t pos->bitproxy。如果我理解正确的自动函数->返回类型对c++11来说是新的,那么还有其他方法可以做到这一点吗?你是什么意思?您的代码是自愿更改的吗?有魔法吗?没有什么强迫你做出改变,如果你是这么要求的话。
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);
...
}