我新建了一个模板数据类,但这个类需要序列化,我使用MFC的两个宏DECLARE_SERIAL(Data)MPLEMENT_SERIAL(Data, CObject, 0)我的PowerData是这样定义的:template <class Type>
class rData : public CObject
{
Data(short max,short min,Type value,BYTE base):_max(max),_min(min),_value(value),_base(base){};
Data(){};
DECLARE_SERIAL(Data)protected:
short _max;
short _min;
Type _value;
BYTE _base;

public:
void SetValue( Type v);
Type GetValue() ; virtual ~Data(){};
    virtual void Serialize(CArchive& ar);};template <class Type void Data<Type>::Serialize (CArchive &ar)
{
if (ar.IsStoring())
{
}
else
{
}
}但程序编译下来,MPLEMENT_SERIAL(Data, CObject, 0) 一直报错,说我的模板类需要参数,但我尝试用
DECLARE_SERIAL(Data<Type>)
MPLEMENT_SERIAL(Data<Type>, CObject, 0)
错误就更多了,哪位大大能给我解决,不胜感激,定有高分奉上!谢谢!

解决方案 »

  1.   

    非常抱歉,上面的类名写错了,应该是Data,:(
      

  2.   

    DECLARE_SERIAL(Data<Type>)
    MPLEMENT_SERIAL(Data<Type>, CObject, 0)里面的Type换成具体的数据类型阿,要不然编译器怎么特化阿?
      

  3.   

    如果换成具体的类型,那用模板何用呢?使用模板就是以为有很多种不同的类型。请 akun(疑无路) 讲的更详细些?
      

  4.   

    你把序列化作为类成员函数
    void rData :::Serialize (CArchive &ar)
    {
    if (ar.IsStoring())
    {
                  _value.Serialize(ar);
    }
    else
    {
                  _value.Serialize(ar);
    }
    }
    这样不知道行不行
      

  5.   

    要不你就只能把
    DECLARE_SERIAL(Data<Type>)
    MPLEMENT_SERIAL(Data<Type>, CObject, 0)
    这些宏换成自己的代码。
    我记得这里面定义了静态函数,这里面怎么处理就要看具体情况了。
      

  6.   

    先回复 newsb(newsb)朋友的帖子:
    你这样作,前面我提出的错误根本就没有处理,肯定是不行的。 akun(疑无路) 朋友的想法我也试过,里面是有静态函数,我发现主要的问题有些类名处理的时候,特别是RUNTIME_CLASS类,如果简单的换成自己的代码,也不可以。
    eg. RUNTIME_CLASS(class_name)
    我现在的class_name 是个模板类,怎样创建他的运行类型类是个问题