
Сообщение от
DrOffset
Ilot, я ж говорю, наследуйся от basic_streambuf (если хочешь собственный Traits, то streambuf от stdcout не подойдет, т.к. привязан к его Traits).
Я знаю что cout не подойдет, поэтому и создал тему. Однако если файловый поток создать это как два пальца:
Кликните здесь для просмотра всего текста
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <iostream>
#include <string.h>
#include <fstream>
struct MyChar: public std::char_traits<char> {
static bool
eq(const char_type& __c1, const char_type& __c2)
{ return toupper(__c1) == toupper(__c2); }
static bool
lt(const char_type& __c1, const char_type& __c2)
{ return toupper(__c1) < toupper(__c2); }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return memicmp(__s1, __s2, __n); }
};
//std::basic_ostream<char, MyChar> mcout;
typedef std::basic_string<char, MyChar> ci_string;
int main()
{
std::basic_ofstream<char, MyChar> mfout;
mfout.open("C:\\rt.txt");
ci_string str1("Masha");
mfout << str1;
return 0;
} |
|
,то с созданием потока завязанного на консоль возникают определенные трудности. Понятно, что нужно создавать поток и передавать ему указатель на потоковый буфер, но вот так
C++ |
1
| std::streambuf * buf = std::cout.rdbuf(); |
|
это сделать нельзя так как у меня должен быть буфер типа:
basic_streambuf<char, MyChar>
Интересно, а где создается объект cout? В заголовочниках нашел только:
и ни одного намека на то где искать определение самого объекта.
Почитал немного о системном программировании в Win. Там пишут, что при создании консольного приложения для него создаются соответствующие потоки ввода/вывода. Другими словами выходит, что бы изменить поток вывода в консоль нужно юзать функции апи, а не стандартной библиотеки?