提问者:小点点

C++数组下标运算符模板错误[已关闭]


我正在尝试创建一个重载下标运算符的模板,以便同时使用int和string值,并且能够以以下方式赋值:MyClass[0]=1;

首先,我不使用模板,只针对整数进行测试:

class storage {
public:

    int& operator[](int idx) { return int_store[idx]; }

    int_store[10];
}

主代码:

int main() {
    storage my_ints;

    my_ints[0] = 100;
    my_ints[1] = 200;
    my_ints[2] = 300;
} 

前面的代码可以工作,因此它将其设置为模板:

template <typename T>
T& operator[](int idx) { return int_store[idx]; }

storage编译,但我在main()变量赋值中发现错误,原因是error:lvalue需要作为赋值的左操作数

我无法确定错误的根源。


共1个答案

匿名用户

我不确定这是否真的是您想要的,但从本质上看,您想要的似乎是让您的类MyClass这样操作:

MyClass m(77);
int j;
std::string s;
j = m[0];
s = m[0];

我想您可以用一个模板来实现这一点,类似于

template<typename T>
T& operator[](int i){
  return my_cast_func<T>(this->buffer[i]);
}

其中my_cast_func指的是以前根据t(手动)定义的一系列模板。

然而,你应该问自己的真正问题是,我到底想做什么? 使模板执行您想要的操作所需的代码将至少与非模板版本一样复杂。 使用模板的唯一原因是编写非常通用的代码,这些代码不知道它将处理哪种特定类型的数据--例如,数学代码,它与intdouble无关,存储容器--但是,像这样混合stringint是非常罕见的。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|数组|下标|运算符|模板|关闭)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?