成员函数模板出错

时间:2010-12-09 06:20:05

标签: c++ templates vc6

我在下面的代码中遇到编译错误。

class A
{
public:
    A()
    {
    }
    ~A()
    {
    }
 void func()
 {
     cout <<"Ha ha ha \n";
 }

};

class C
{
public:
    C()
    {
    }
    ~C()
    {
    }
template<typename type> func()
{
    type t;
    t.func();
}
void callme()
{
    func<A>();
}
};

2 个答案:

答案 0 :(得分:3)

func<T>()的定义未指定其返回类型,这在C ++中无效。

应该是:

template<typename type> void func()
{
    type t;
    t.func();
}

答案 1 :(得分:3)

VC6不支持成员函数模板。你实际上有几个解决方案:

func()移出课程定义

template<typename type> void func()
{
    type t;
    t.func();
}

或重写callme()

void callme()
{
   A a;
   a.func();
}

或使用课程模板

class C
{
public:
   template<class T> struct func
   {
      void operator()()
      {
         T t;
         t.func();
      }
   };

   void callme()
   {
      func<A>()();
   }
};