考虑一个类,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];
我正在尝试做什么?
提前致谢。
答案 0 :(得分:4)
不可能为操作符语法提供显式模板参数,如果你想要那种东西,你的foo.at(ndx)是通常的答案。