Цепочка методов в C++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Цепочка методов в C++ - 2009-11-16 18:18:36.020000
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
Пытаюсь тут реализовать цепочку методов, в данном случае наподобии cout<<1<<2<<3<<"char";
class File {
protected:
ofstream out;
public:
File(char *name){
this->out.open(name,ios::out);
outINI(this->out);
}
template<typename _FIT>
File *operator<< (_FIT &in){
this->out<<in;
return this;
}
~File(){
this->out.close();
}
};
должно быть так File fp("filename.txt"); fp <<"line1\n" <<"line2\n" <<setw(10)<<"iomanip";
|
|
|
RE: Цепочка методов в C++ - 2009-11-16 18:59:19.233333
|
|
|
psina007
Сообщений: 98
Оценки: 0
Присоединился: 2009-05-09 22:41:33.580000
|
А в чем собственно проблема? Если компилятор ругается, то давайте сюда список ошибок, будем разбираться.
|
|
|
RE: Цепочка методов в C++ - 2009-11-16 23:25:59.530000
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
D:\CPP\ff.cpp(50) : error C2296: '<<' : illegal, left operand has type 'class File *' D:\CPP\ff.cpp(50) : error C2297: '<<' : illegal, right operand has type 'char [2]' D:\CPP\ff.cpp(60) : error C2296: '<<' : illegal, left operand has type 'class File *' D:\CPP\ff.cpp(60) : error C2297: '<<' : illegal, right operand has type 'double' ……..
|
|
|
RE: Цепочка методов в C++ - 2009-11-17 00:26:23.936666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Smelo
File *operator<< (_FIT &in){
this->out<<in;
return this;
} Не, так ведь не покатит. Насчёт того как надо перегружать << – это я не помню, оставлю это на твоей совести. Но ты возвращаемый тип выбрал не тот. Как будет работать: `fp <<"line1\n"<<"line2\n"'? Сначала отработает `fp << "line1\n"', выведет строчку и вернёт указатель на fp. Следующим шагом, соответственно будет что-то в стиле: `&fp << "line2\n"': &fp – это указатель на fp, который вернёт первое выполнение оператора. Ненене, так не покатит. Надо из оператора возвращать `File&', то есть ссылку на File.
|
|
|
RE: Цепочка методов в C++ - 2009-11-17 00:32:14.563333
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
так ошибок нет, но и не работает нифига =(
class File {
protected:
ofstream out;
public:
File(char *name){
this->out.open(name,ios::out);
outINI(this->out);
}
template<typename _FIT>
File &operator<< (_FIT &in){
this->out<<in;
return *this; // бред, не?
}
~File(){
this->out.close();
}
};
|
|
|
RE: Цепочка методов в C++ - 2009-11-17 12:42:32.413333
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
вычитал щас, что для операций постинкремента нужно добавлять параметр int, у меня не вышло, ругается сделал cout File &operator<< (_FIT &in){ cout <<in; this->out<<in; return *this; } выводит получается проблема в this->out одна я пробовал и без this результат один
|
|
|
RE: Цепочка методов в C++ - 2009-11-17 15:42:01.230000
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
Всё, я понял, класс рабочий проблема была в cin.get() из-за которого не работал деструктор типа void main(){ /*….*/ cin.get(); } Как быть? cin.get() нужен, а вручную вызывать деструктор не интересно
|
|
|
RE: Цепочка методов в C++ - 2009-11-17 15:56:33.876666
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
решил при помощи system("pause");
|
|
|
RE: Цепочка методов в C++ - 2009-11-19 06:58:46.606666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Smelo Как быть? cin.get() нужен, а вручную вызывать деструктор не интересно сбрасывать буфер канала после записи в него: out << in;
out.flush();
|
|
|
RE: Цепочка методов в C++ - 2009-11-19 19:49:37.673333
|
|
|
Smelo
Сообщений: 119
Оценки: 0
Присоединился: 2009-09-27 15:48:37.386666
|
а в этом случае экземпляр ofstream out не уничтожается? как в случае с close()
|
|
|
RE: Цепочка методов в C++ - 2009-11-19 21:39:13.510000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Smelo а в этом случае экземпляр ofstream out не уничтожается? как в случае с close() нет. сбрасываются накопленные в streambuf данные. аналогичное действие выполняется при передаче в поток std::endl http://www.cplusplus.com/reference/iostream/manipulators/flush/ здесь о streambuf: http://www.slac.stanford.edu/comp/unix/gnu-info/iostream_5.html#SEC26
|
|
|
|
|