none
多态下的 具体化 问题 RRS feed

  • 常规讨论

  • #include<iostream>
    #include<string>
    /*struct wyz
    {
     int inian;
     std::string srxing;
    };
     
     void iquote( wyz &xing);*/

    template<typename T>
    void iquote(T x);

    template<typename T,typename Any>
    T iquote(T ia,Any db);

    int main()
    {
     
     std::string st="wetwe";

     iquote(12);
      iquote(12.5);
     iquote(st);
     std::cout<<iquote(12ul,235.8f);
    // wyz jgl;
     //  iquote(jgl);

     return 0;

     
    }
    template<typename T>
    void iquote(T x)
    {
     std::cout<<"\""<<x<<"\""<<std::endl;
    }
    template<typename T,typename Any>
    T iquote(T ia,Any db)
    {
     std::cout<<db<<",";
     return ia;
    }
     /*void iquote( wyz &xing)           //template<> viod iquote<wyz>(wyz &xing)或template<> viod iquotewyz &xing)
    {
     xing.srxing="dsfas";
     xing.inian=45;
    }
    */

    这个代码如果这样注注释了就能运行
    相反的注释也能运行
    但同时就不行。
    不是说在 第三代具体化中
    具体化将覆盖常规模板,而非模板函数将覆盖具体化和常规模板吗
    在这里本想试试template<> viod iquote<wyz>(wyz &xing)
    可是连简单的都不行
    我是在vc 6.0中运行的。


    c/c++ 冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功
    2009年10月19日 5:19

全部回复

  • VC6并不完全符合标准,尤其模版支持的不是很好。而且函数模版是不支持偏特化的。
    麻烦把正确答案设为解答。
    2009年10月19日 5:23
    版主
  • 那用什么好呢
    编译器什么才是最新支持模板的呢推荐个啊
    c/c++ 冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功
    2009年10月19日 5:24
  • 尝试VS2008或者GCC可能会好一些。不过都不能保证对标准全部支持。
    麻烦把正确答案设为解答。
    2009年10月19日 5:29
    版主
  • #include<iostream>
    #include<string>
    /*struct wyz
    {
     int inian;
     std::string srxing;
    };
     
     void iquote( wyz &xing);*/

    template<typename T>
    void iquote(T x);

    template<typename T,typename Any>
    T iquote(T ia,Any db);

    int main()
    {
     
     std::string st="wetwe";

     iquote(12);
      iquote(12.5);
     iquote(st);
     std::cout<<iquote(12ul,235.8f);
    // wyz jgl;
     //  iquote(jgl);

     return 0;

     
    }
    template<typename T>
    void iquote(T x)
    {
     std::cout<<"\""<<x<<"\""<<std::endl;
    }
    template<typename T,typename Any>
    T iquote(T ia,Any db)
    {
     std::cout<<db<<",";
     return ia;
    }
     /*void iquote( wyz &xing)           //template<> viod iquote<wyz>(wyz &xing)或template<> viod iquotewyz &xing)
    {
     xing.srxing="dsfas";
     xing.inian=45;
    }
    */

    这个代码如果这样注注释了就能运行
    相反的注释也能运行
    但同时就不行。
    不是说在 第三代具体化中
    具体化将覆盖常规模板,而非模板函数将覆盖具体化和常规模板吗
    在这里本想试试template<> viod iquote<wyz>(wyz &xing)
    可是连简单的都不行
    我是在vc 6.0中运行的。


    c/c++ 冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功

    哎,下了vc++ 2008速成版 还是不能运行这本书(C++.Primer.Plus.第五版.中文版)中所说的具体化。
    c/c++ 冰冻三尺非一日之寒,为了共同的梦想...........努力........在努力.......成功
    2009年10月19日 11:36