首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

接受任何参数的函数,求真大神解,该怎么处理

2014-01-14 
接受任何参数的函数,求真大神解#includeiostream#includestringusing namespace stdclass cdr{public

接受任何参数的函数,求真大神解
#include<iostream>
#include<string>

using namespace std;

class cdr
{
public:

template<class T>
void GetData(T a)
{
memcpy(&a,_data,sizeof(a));
}

void SetData(char* tdata);

private:
char _data[32];
};

void cdr::SetData(char* tdata)
{
strcpy(_data,tdata);
}

struct charBuf
{
char data[32];
};

void main()
{
cdr instance;
charBuf tbuf;

instance.SetData("hello world");
instance.GetData(tbuf);

//输出为啥不是 hello world
cout<<tbuf.data<<endl;

}

//还有怎么把GetData以非内联的形式写到类的外面去(像SetData一样)
[解决办法]


class cdr
{
   ...
   template<class T>
   void GetData(T a);
   ...
}
template<class T>
void cdr::GetData(T a)
{
   memcpy(&a,_data,sizeof(a));
}

[解决办法]
引用:

class cdr
{
   ...
   template<class T>
   void GetData(T a);
   ...
}
template<class T>
void cdr::GetData(T a)
{
   memcpy(&a,_data,sizeof(a));
}



class cdr
{
public:
    template<class T>
    void GetData(T& a); //这里必须用引用,否则是拷贝传递,传进去的参数只是副本,你在函数内部做任何操作都是无效的

    void SetData(char* tdata);

    private:
    char _data[32];
};

void cdr::SetData(char* tdata)
{
    strcpy(_data,tdata);
}

template<class T>
void cdr::GetData(T& a)
{
    memcpy(&a,_data,sizeof(a));
}

这是你第一个问题的解答,完整代码可以看这个在线编译器的链接:
http://coliru.stacked-crooked.com/a/fd6523b02b328970

热点排行