Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类的代理结构_C++_Templates_Struct - Fatal编程技术网

C++ 模板类的代理结构

C++ 模板类的代理结构,c++,templates,struct,C++,Templates,Struct,我正在为一个类编写一个程序,这个类的基本问题是使用无符号整数的向量,以及模拟布尔向量的逐位运算,但使用的内存要少得多 要使运算符[]同时用作r值和l值,需要一个bitproxy结构,它在代码调用运算符[]和向量中所需的位之间进行调解 教授包括BitArray接口,该接口将其声明为模板类,但在引用bitproxy时,不使用模板 比如说: template < class IType = unsigned int > class BitArray { vector<ITyp

我正在为一个类编写一个程序,这个类的基本问题是使用无符号整数的向量,以及模拟布尔向量的逐位运算,但使用的内存要少得多

要使运算符[]同时用作r值和l值,需要一个bitproxy结构,它在代码调用运算符[]和向量中所需的位之间进行调解

教授包括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);

    ...

}
欠定义位数组和位数组

过定义位数组&位数组

我的教授是否犯了一个错误,遗漏了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);

    ...

}