【发布时间】:2014-09-19 03:15:59
【问题描述】:
为了定义二维关联数组,我在类中编写了模板运算符以使其更接近原始数组。这是我的算子函数。
template <class T, class U, class V>
T& TwoAssocDArray<T,U,V>::operator [](U input1)[](V input2) {
for(int i=0; i<size(); i++)
if(stack[i].key1 == input1 && stack[i].key2 == input2)
return stack[i].d;
DataPack pack;
pack.key1 = input1;
pack.key2 = input2;
stack.push_back(pack);
return stack[size].d;
}
类接口,
#ifndef _DATASTRUCTURE_H_
#define _DATASTRUCTURE_H_
#include <vector>
using namespace std;
template <class T, class U, class V>
class TwoDAssocArray {
private:
typedef struct _DataPack {
T d;
U key1;
V key2;
} DataPack;
vector<DataPack> stack;
public:
int size();
bool isIn(U input1, V input2);
bool add(T data, U input1, V input2);
T get(U input1, V input2);
T& operator [](U input1)[](V input2);
};
#endif
然后我在 main() 中对其进行了测试。
int main(int argc, char *argv[]) {
TwoDAssocArray<int, char*, char*> assocArr;
assocArr["in1"]["in2"] = 2246001;
cout << assocArr["in1"]["in2"] << endl;
return 0;
}
构建并运行后,我发现它不起作用,出现十几个错误。 我认为主要原因是我不熟悉的模板语法。 我相信大量的错误总是来自一些语法错误。
如果有人愿意帮助我,我将不胜感激。
【问题讨论】:
-
你应该检查你的设计:像
arr[x][y]这样的东西需要一个支持[]访问的arr对象,并返回另一个适合第二个[]访问的对象。