积极答复者
数组类型能否作为模板参数?

问题
-
请看这道题:
http://acm.hdu.edu.cn/showproblem.php?pid=3786
我定义了如下数据结构:
typedef char Parents[2];
typedef map<char, Parents> FamilyTree;但经测试发现该数据结构不能如我所望地工作:
FamilyTree t;
t['a'][0]='b';
t['a'][1]='c';编译出错:error C2440: '<function-style-cast>' : cannot convert from 'int' to 'char [2]'
请问是何原因?这样定义有问题吗?
答案
-
不可以,向map插入元素时,会调用如不是指针类型则会调用构造。所以数组不行。你可以封装一下。
麻烦把正确答案设为解答。- 已标记为答案 VisualElevenModerator 2011年5月7日 12:57
-
您可以使用结构体来替代。类似这样:
struct PARENTS
{
char parents[2];
};
typedef map<char, PARENTS> FamilyTree;
FamilyTree t;
PARENTS info = {'a', 'b'};
t.insert(pair<char, PARENTS>('a', info));
或者这样:
char parents[2] = {'b', 'c'};
typedef map<char, char(*)[2]> FamilyTree;FamilyTree t;
t.insert(pair<char, char(*)[2]>('a', &parents));
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.- 已标记为答案 VisualElevenModerator 2011年5月7日 12:58
全部回复
-
不可以,向map插入元素时,会调用如不是指针类型则会调用构造。所以数组不行。你可以封装一下。
麻烦把正确答案设为解答。- 已标记为答案 VisualElevenModerator 2011年5月7日 12:57
-
您可以使用结构体来替代。类似这样:
struct PARENTS
{
char parents[2];
};
typedef map<char, PARENTS> FamilyTree;
FamilyTree t;
PARENTS info = {'a', 'b'};
t.insert(pair<char, PARENTS>('a', info));
或者这样:
char parents[2] = {'b', 'c'};
typedef map<char, char(*)[2]> FamilyTree;FamilyTree t;
t.insert(pair<char, char(*)[2]>('a', &parents));
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.- 已标记为答案 VisualElevenModerator 2011年5月7日 12:58