none
一个关于C++模板的问题 RRS feed

  • 问题

  • 问题是这样的我定义了一个模板函数。实际使用的时候参数比较多,以下只是个范例,不要提出不要使用模板的建议。
    template<class T>
    static void ToBeChange(T data)
    {
           data[0]=T(0,1);
           data[1]=T(1,2);
    }
    使用的时候是这样
    struct Change
    {
          Change(int _x,int _y)
         {
             x=_x;
             y=_y;
         }
         int x;
         int y;
    }

    Change* mych;
    ToBeChange(mych);
    这样编译就无法通过了,我找到了原因,是因为这样使用的话进去后T的类型就是Change*,而我实际想用的却是Change的构造函数,由于没有Change*的构造函数,所以编译就出错了。有没什么办法直接把Change*改为Change,或者如何在Change结构中产生Change*构造函数。由于类型无法确定所以不能在结构中自定义个函数来调用。或者有其他好办法也行。因为传参的时候不能确定我要传的结构是什么样的,所以不要提出不用模板的建议。
    2009年8月18日 4:10

答案

  • template<class T>
    static void ToBeChange(T* data)
    {
           data[0]=T(0,1);
           data[1]=T(1,2);
    }

    麻烦把正确答案设为解答。
    • 已标记为答案 嗜血者 2009年8月18日 6:31
    2009年8月18日 5:46
    版主

全部回复

  • template<class T>
    static void ToBeChange(T* data)
    {
           data[0]=T(0,1);
           data[1]=T(1,2);
    }

    麻烦把正确答案设为解答。
    • 已标记为答案 嗜血者 2009年8月18日 6:31
    2009年8月18日 5:46
    版主
  • 谢谢你。^_^,你这方法是可以,原来我T1有这么用居然没发现。把问题解决了,不过我发现了新问题
    “void FillPoint::FillCubePoint(T *,int,XYZINIT,XYZINIT)”: 应输入 4 个参数,却提供了 5 个
    “void FillPoint::FillCubePoint(T *,int,XYZINIT,XYZINIT,T1 *)”: 无法从“重载函数类型”为“T *”推导 <未知> 参数
    原来用模板不能重载,会出错。
    我刚又试了下把重载函数删除个掉结果还是会提示
    “void FillPoint::FillCubePoint(T *,int,XYZINIT,XYZINIT,T1 *)”: 无法从“重载函数类型”为“T *”推导 <未知> 参数
    好像不单单是重载的问题。是根本用不了好像

    不好意思,是自己太马虎了,参数被我改过,结果不适合改过后的这类型。谢谢你了
    2009年8月18日 6:24