> не знаю, не знаю, вот gcc 3.4.6 не может собрать FBreader,- куча
> ошибок c std::string, о чем есть соответ. багрепорты
GCC 3.4.x много чего собрать не может, как правило из-за своеобразного крепления ручек к телам авторов поделок. Про FBreader не знаю, поделись ссылкой на багрепорты.
> не знаю, не знаю, вот gcc 3.4.6 не может собрать FBreader,- куча > ошибок c std::string, о чем есть соответ. багрепорты
Это проблема не gcc, а неумения афффторов писать на С++. Потому как это ламенство не знать того, что std - это namespace, которое надо либо включать полностью посредством using namespace std; либо указанием using std::string;
> > не знаю, не знаю, вот gcc 3.4.6 не может собрать FBreader,- куча > ошибок c std::string, о чем есть соответ. багрепорты
> Это проблема не gcc, а неумения афффторов писать на С++. Потому как это ламенство не знать того, что std - это namespace, которое надо либо включать полностью посредством using namespace std; либо указанием using std::string;
Во-во, понапишут программ такие вот пейсатели, а потом появляются лозунги "32-ядерный Интель в каждый десктоп".. и ложки серебряные пропадают... Лучше бы на Жабе писали.
> Это проблема не gcc, а неумения афффторов писать на С++. Потому как это ламенство не знать того, что std - это namespace, которое надо либо включать полностью посредством using namespace std; либо указанием using std::string;
или же, все-таки как белые люди, "std::string s;" а за использование директивы using расстреливать на месте без суда и следствия :-/
> Shared-библиотеки, вообще-то, должны использовать не STL-типы, а POD.
То есть, вместо Somefunc(const std::string & s); Somefunc(const char * c); Потому как иначе, при сборке с другой реализацией STL, все либо не соберется, либо работать не будет.
>это, ты типа свои знания в C++ показал, что ли? если ты не знал,
можно писать и так,- ... std::string str; str = "string"; ... , без
использования директивы using
Можно и презерватив на глобус натянуть, ага.
Еще можно писать в таком вот стиле:
std::string key, value;
std::map<std::string, std::string> m;
m.insert(std::pair<std::string, std::string>(key, value));
Вместо того, чтобы в начале логического блока написать
{
using std::string;
using std::map;
using std::pair;
string key, value;
m.insert(pair<string, string>(key, value));
}
>> Это проблема не gcc, а неумения афффторов писать на С++. Потому как это ламенство не знать того, что std - это namespace, которое надо либо включать полностью посредством using namespace std; либо указанием using std::string;
> или же, все-таки как белые люди, "std::string s;" а за использование директивы using расстреливать на месте без суда и следствия :-/
После такихтопиков, начинай считать, что за использование си++ надо расстреливать на месте без суда и следствия...
>После такихтопиков, начинай считать, что за использование си++ надо расстреливать на месте без суда и следствия...
Я тогда еже не знаю, что надо делать после топиков про то, как это классно - писать на ЯП, где не надо декларировать переменные перед их использованием....
Чтобы каждый потом изобретал строки или копировал память ? Если есть договоренности, что нужно использовать конкретный STL, то почему бы не использовать ? А char* это для С программистов. Объекты наше все! Хотя откровенно говоря реализация std::string больше похож на процедурное программирование, чем на ООП :)
И если еще вспомнить про параметр с char* - я даже боюсь себе представить сколько раз потом на нем вызовут strlen и пробегутся по памяти, вместо использования std::string.size()
>Чтобы каждый потом изобретал строки или копировал память ? Если есть договоренности, что нужно использовать конкретный STL, то почему бы не использовать ? А char* это для С программистов. Объекты наше все! Хотя откровенно говоря реализация std::string больше похож на процедурное программирование, чем на ООП :)
char * - это для переносимости. Почитайте того же Александреску о проектировании интерфейсов.
Если есть договоренность использовать конкретный STL, то, конечно же, нет смысла пользоваться POD.
>И если еще вспомнить про параметр с char* - я даже боюсь себе представить сколько раз потом на нем вызовут strlen и пробегутся по памяти, вместо использования std::string.size()
Ну, во-первых, можно передавать не char *, а (char *, int). А во-вторых, ничто не мешает сразу после передачи библиотечной функции char * сделать из него std::string s(szCharData);
> А во-вторых, ничто не мешает сразу после передачи библиотечной функции
> char * сделать из него std::string s(szCharData);
Мещает, точнее - душит. Жаба :)
Да, можно; причем лучше вынести все эти определения в отдельный файл:
namespace XXXYYY
{
typedef std::string String;
.....
}
----
#include "STLTypes.hpp"
...
...
...