数组嵌套代理

时间:2017-06-06 08:54:57

标签: c++ arrays proxy

我创建了一个数组,我的问题在运算符方括号“[]”中。共享数组以减少每次复制它,因此当需要进行写操作时,必须先进行数组的私有副本。使用运算符“[]”时,无法知道条目上的操作是读操作还是写操作。为此,使用代理,而不是返回对条目的引用,而是创建一个代理,引用数组对象和数组中的必需条目。

运算符“[]”的代码:

inline typename BasicTypesArray< T >::BasicTypesArrayProxy BasicTypesArray< T >::operator[]( UnsignedInteger64bits entryIndex )
{
    return ( BasicTypesArrayProxy( *this, entryIndex ) );
}

代理构造函数的代码:

    inline BasicTypesArray< T >::BasicTypesArrayProxy::BasicTypesArrayProxy( BasicTypesArray< T >& basicTypesArray, UnsignedInteger64bits entryIndex ) :
    m_basicTypesArrayObject( basicTypesArray ),
    m_entryIndex( entryIndex )
    {}

问题是,使用g ++编译时会出现以下错误:

在BasicTypesArrayTest.cpp中包含的文件中:4:0: ../Utilities/GeneralPorposeContainers/Array/BasicTypes/BasicTypesArray/BasicTypesArray.h:实例化'Universe :: GeneralPurposeContainers :: BasicTypesArray :: BasicTypesArrayProxy Universe :: GeneralPurposeContainers :: BasicTypesArray :: operator [with T = int; Universe :: UnsignedInteger64bits = long unsigned int]':

BasicTypesArrayTest.cpp:31:13:从这里开始 ../Utilities/GeneralPorposeContainers/Array/BasicTypes/BasicTypesArray/BasicTypesArray.h:2311:64:错误:没有用于调用'Universe :: GeneralPurposeContainers :: BasicTypesArray :: BasicTypesArrayProxy :: BasicTypesArrayProxy(Universe :: GeneralPurposeContainers ::)的匹配函数BasicTypesArray :: BasicTypesArrayProxy)'

         return ( BasicTypesArrayProxy( *this, entryIndex ) );

对于长错误消息感到抱歉。

为什么编译器尝试使用代理调用代理构造函数而不是对它嵌套在其中的类的引用?

1 个答案:

答案 0 :(得分:1)

我认为它已准备好运行您的类BasicTypesArrayProxy( *this, entryIndex )的构造函数。但是为了返回一个值,它必须将复制构造函数运行到调用代码。 您可以尝试此测试:将operator[]的返回类型设置为引用(这将导致实际运行中的崩溃),以查看您的代码是否可以通过编译阶段。