我目前正在编写一些代码来将 java 代码转换为 c++ 代码,因此最终会遇到一些非常棘手的问题。我的问题是,是否有可能有一个从包含类返回模板化值的重载运算符?
即:我希望能够对以下课程进行以下操作。
SmartPointer<ArrayClass<bool>*> boolArray = new ArrayClass<bool>(true, true, false, false);
bool b = boolArray[1];
template <typename T> class SmartPointer
{
T data;
template <typename U>
U operator [](int i) const
{
return ((*T)(*data))[index];
}
}
template ArrayClass<U>
{
// Various constructors...
U operator [](int i) const
{
// Implementation here
}
}
我得到的问题(可以理解)是:错误 C2783:'U SmartPointer::operator const':无法推断出'U'的模板参数编译器不知道 U 是什么,我希望能够告诉它它是bool - 因为这是 ArrayClass 将返回的内容。SmartPointer 可能不包含数组,在这种情况下 [] 运算符没有意义。但是我希望能够将它传递给智能指针内的对象,以防万一......?
我不知道该怎么做才能完成这项工作。也许不可能??
回答:
感谢大家的回复。提供了 3 个基本相同的解决方案,但我已将其授予 Oktalist,因为他是第一个。不过,我仍然对这个解决方案有困难,因为我正在将指针传递给我的 SmartPointer 类以允许我使用前向声明的类。这阻止了我使用 T::value_type 作为我的返回类型,但这似乎是正确的方法。看起来我对编译器的大部分要求,而且看起来我必须恢复到简单地取消引用智能指针才能进行数组访问!