我应该怎么做?

五号智能 2008-06-03 01:54:55
我在写练习的时候遇到这么样的一个问题

///////////////////////////////读取文件/////////////////////////////////////////////
inline int loadfile(list<Hotel> &list_hot)
{
ifstream infile("hot.dat");
int num=1;
if (!infile)
{
cout <<"第一次运行程序吗?如果不是您的数据文件可能丢失!"<<endl;
}
else
{
Hotel temp;

while (infile >> temp)
{
temp.num(num);
list_hot.push_back(temp);
num++;
}

infile.close();
infile.clear();
}
return num-1;
}
///////////////////////////////读取文件///////////////////////////////////////
inline int loadfile(list<Yuding> &list_hot)
{
ifstream infile("yud.dat");
int num=1;
if (!infile)
{
cout <<"第一次运行程序吗?如果不是您的数据文件可能丢失!"<<endl;
}
else
{
Yuding temp;

while (infile >> temp)
{
temp.num(num);
list_hot.push_back(temp);
num++;
}

infile.close();
infile.clear();
}
return num-1;
}
/////////////////////////////写入文件////////////////////////////////////////////

inline void savefile(list<Hotel> &list_hot)
{
ofstream outfile("hot.dat");

for(list<Hotel>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)
{
outfile<<*li_hot;
}
outfile.close();
outfile.clear();
}

/////////////////////////////写入文件///////////////////////////////////////////

inline void savefile(list<Yuding> &list_hot)
{
ofstream outfile("yud.dat");

for(list<Yuding>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)
{
outfile<<*li_hot;
}
outfile.close();
outfile.clear();
}


这两个读文件和写文件,只有一点不同,那就是写入的文件名称
本来我想把文件名设成一个string变量,然后就能把这两个load 和save变成template.
但是我发现这样做之后,还要在使用这个template的地方把这个变量赋值。使用的地方有很多,也就是说我想简化代码
可是我却发现我得不偿失,我应该怎么做呢?
...全文
92 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
五号智能 2008-06-03
  • 打赏
  • 举报
回复



string a="hot.dat";
string b="yud.dat";




savefile(hot,a)
savefile(yud,b)




template <class T>
inline savefile(T,a)
{
ofstream outfile(a.c_scr());

<Hotel>
for(list <Yuding>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)
{
outfile<<*li_hot;
}
outfile.close();
outfile.clear();
}


可能是这个问题提错了,这是我本想达到的效果,可以我没想,循环里面处理的数据也是不一样的。

这是对两个类进行操作的。

我的本意是达到这个效果之后,如果不把string a,b变成全局变量,我每个想调用这个这个template的函数都得写上一句
string a="hot.dat";
string b="yud.dat";
如果调用这个template的函数有数十个之多;
写这个赋值句的量就超过了template本身很多;
这是一件很得不偿失的事情;
我想问的就是还有没 有其它的解决方法。

taodm 2008-06-03
  • 打赏
  • 举报
回复
函数参数是干嘛吃的呢?
李V四 2008-06-03
  • 打赏
  • 举报
回复
你可以定义宏 如
#define SAVEFILE(A,B) \
inline void savefile(list<Yuding> &A) \
{\
ofstream outfile(B);\
\
for(list<Yuding>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)\
{\
outfile<<*li_hot;\
}\
outfile.close();\
outfile.clear();\
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧