接受任何参数的函数,求真大神解,该怎么处理
接受任何参数的函数,求真大神解
#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一样)
------解决方案--------------------
------解决方案--------------------
这是你第一个问题的解答,完整代码可以看这个在线编译器的链接:
http://coliru.stacked-crooked.com/a/fd6523b02b328970
#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
{
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