| Цитата(Олег4 @ 10.12.2006, 06:52) | Возвращать ссылку *this надо, а не ссылку на vector.  |
Этот способ я знаю. Но мне надо было чтобы оператор вызывался в нутри функций-членов класса.
| Код |
void CMediaInfo::GetRiffHeaders(string sFullFileName) {
mDataMemo << sFullFileName.c_str() << " is avi file."; }
|
Мне пришлось делать их глобальными в фаиле реализации. Спасибо Daevaorn. Вот что я сделал. Конечно не то чтоя хотел но..
| Код | const char _setNewLine[] = "endl";
inline vector<string>& operator<<(vector<string>& pVec, const char* sData) {
if ( !strcmp(sData,_setNewLine) ) { pVec.push_back(""); } else { if ( pVec.empty() ) pVec.push_back(sData); else { string tmp(*--pVec.end()); tmp += sData; pVec.pop_back(); pVec.push_back(tmp); } } return(pVec); }
inline vector<string>& operator<<(vector<string>& pVec, string sData) { pVec.push_back(sData); return(pVec); }
inline vector<string>& operator<<(vector<string>& pVec, long sData) { char* pNum; pNum = new char[BufSize]; _ltoa_s(sData,pNum,BufSize,10); pVec.push_back(pNum); delete [] pNum; return(pVec); }
inline vector<string>& operator<<(vector<string>& pVec, int sData) { char* pNum; pNum = new char[BufSize]; _itoa_s(sData,pNum,BufSize,10); pVec.push_back(pNum); delete [] pNum; return(pVec); }
inline vector<string>& operator<<(vector<string>& pVec, DWORD sData) { char* pNum; pNum = new char[BufSize]; _ltoa_s(static_cast<unsigned long>(sData),pNum,BufSize,10); pVec.push_back(pNum); delete [] pNum; return(pVec); }
|
несколько перегрузок. ) Да вот тут еще кое-что. Скажите как можно перегрузить оператор на std::endl?
чтобы можно было писать
mDataMemo << sFullFileName.c_str() << " is avi file." << std::endl;
и следующая запись уже пойдет в следующий элемент vectora. |