如何使用两种不同的返回类型重载 []

问题描述 投票:0回答:1

假设堆上有一个字节缓冲区:

BYTE *Buffer = new BYTE[128] ;

有时我需要一个字节:

BYTE x = Buffer[5] ;

有时我需要一个指向缓冲区一部分的指针,例如映射结构:

MyStruct *Str = (MyStruct*)&Buffer[5] ;

如果我想在课堂上模仿这个:

class MyBuffer
{
public:

MyBuffer()  { Buffer = new BYTE[128] ; }
~MyBuffer() { delete[] Buffer ; }

BYTE operator[](int Index) const { return Buffer[Index] ; }
// BYTE *operator[](int Index) const { return &Buffer[Index] ; }

BYTE *Buffer ;
};

情况 1. 可以,但情况 2.

MyBuffer Buffer ;

BYTE x = Buffer[5] ; // Works

MyStruct *Str = (MyStruct*)&Buffer[5] ; // Won't work

我无法实现仅返回类型不同的同一运算符的两个变体。 所以我想知道,我所要求的可能吗?

c++
1个回答
0
投票

您可以将返回类型更改为引用类型(特别是左值引用),如下所示。 这是有效的,因为

f()
这样的函数调用,其中
f
通过左值引用返回是左值,我们可以将
operator&
应用于lvlue。

//--v------------------------->return by reference
BYTE& operator[](int Index) const { return Buffer[Index] ; }

© www.soinside.com 2019 - 2024. All rights reserved.