none
数组类型能否作为模板参数? RRS feed

  • 问题

  • 请看这道题:

    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]'

    请问是何原因?这样定义有问题吗?

     

    2011年5月3日 12:41

答案

  • 不可以,向map插入元素时,会调用如不是指针类型则会调用构造。所以数组不行。你可以封装一下。
    麻烦把正确答案设为解答。
    2011年5月3日 15:11
    版主
  • 您可以使用结构体来替代。类似这样:
    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.
    2011年5月4日 0:24
    版主

全部回复

  • 不可以,向map插入元素时,会调用如不是指针类型则会调用构造。所以数组不行。你可以封装一下。
    麻烦把正确答案设为解答。
    2011年5月3日 15:11
    版主
  • 您可以使用结构体来替代。类似这样:
    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.
    2011年5月4日 0:24
    版主