我對解決這個問題,我有確定哪些類傳遞給我的重載操作< <()函數的最佳方式問題..確定使用哪個類
我< <函數讀取一行從輸入文件中將其標記並將該數據插入到Customer,Tour或GuidedTour對象中,具體取決於該特定行的第一個標記
Tour是GuidedTour的基類,但Customer根本不相關,所以我不認爲我可以使用他們之間的演員(或者我可以嗎?)
這裏是代碼:
for (unsigned int i = 0; i < inputFiles.size(); i++)
{
ifstream fin(inputFiles[i], ios_base::in);
int line = 0;
char c;
while (fin)
{ line++;
c = fin.peek(); //use peek() to check first char of next line
if (c == ios::traits_type::eof())
break;
// this is where i am having the trouble
else if (c == 'C')
Customer *temp = new Customer();
else if (c == 'g')
GuidedTour *temp = new GuidedTour();
else if (c == 't')
Tour *temp = new Tour();
else
throw boost::bad_lexical_cast();
try
{
fin >> *temp;
}
catch(boost::bad_lexical_cast&)
{
cerr << "Bad data found at line " << line
<< " in file "<< inputFile[i] << endl;
}
customers.push_back(temp);
}
fin.close();
}
其明顯的在那裏我遇到的麻煩;因爲我正在初始化條件塊內的對象,所以在塊完成後它們不會繼續存在,但我不知道如何讓它們持續下去。或者它只是不可能做到我想要實現的目標?
我明白這不是一個很直接的問題,我剛剛被抨擊我的頭撞牆試圖解決這個問題的年齡,所以任何建議將不勝感激..
編輯:是有可能做一些事情,比如在循環的開始處使用一個void指針,稱爲temp,然後在將它傳遞給條件中的一個對象之前將它傳遞給finder < < * temp?
你可以讓你的所有類共享一個通用的基類嗎? – GWW
不,不幸的是,他們不能.. – guskenny83
[boost :: any](http://www.boost.org/doc/libs/1_54_0/doc/html/any.html)也可能是一個不錯的選擇,因爲你是已經使用'boost' – GWW