c ++模板返回类型operator []

时间:2017-12-26 00:23:19

标签: c++

考虑一个类,Foo,我想定义一个operator []重载,它实际上是一个模板,其中返回类型是模板化的:

class Foo
{
    template<typename T> T operator[](size_t i)
    {
        return *(reinterpret_cast<T *>(get some pointer));
    }
}

这可以工作和编译,但我无法弄清楚如何使用它。我不知道在调用它时在何处指定类型。为了提供参考示例,假设我将operator []替换为函数名称:

class Foo
{
    template<typename T> T at(size_t i)
    {
        return *(reinterpret_cast<T *>(get some pointer));
    }
}

然后我可以做类似的事情:

Foo foo;

int myFooInt = foo.at<int>(32); // gets an int at position 32

这编译并给出了“get some pointer”提供的某种定位内存的实际实现,它返回正确的值。 (注意,我没有提供任何关于“位置”的含义的信息,在这种情况下,我的问题确实无关紧要。)

但是我无法弄清楚在使用[]时如何/在何处指定类型。

顺便说一句,以下工作正常:

int myFooInt = foo.operator[]<int>(32);

但这样的事情无法编译:

int myFooInt = foo[32]<int>;

也不是这样:

int myFooInt = foo<int>[32];

我正在尝试做什么?

提前致谢。

1 个答案:

答案 0 :(得分:4)

不可能为操作符语法提供显式模板参数,如果你想要那种东西,你的foo.at(ndx)是通常的答案。