![]() |
[C++] Class: Tokenize
Наверное все сталкивались с проблемой когда надо разбить строку по разделителям в многопоточном приложении. Функция strtok(); для этого не подходит, так как она использует статические элементы и при одновременом вызове в двух или более потоках работать будет некоректно ( я говорю о потоках, вызваных с помощью WinApi фун-ции CreateThread();, при использовании _beginthread она будет работать корректно, см. Рихтера ). Недавно я столкнулся с такой проблеме в одном из своих проектов, и для таких целей написал класс токенайзера.
Объявление: Код:
class TokenizeКод:
Tokenize::Tokenize()Код:
Tokenize tok; |
Круто.
Цитата:
Затем идут два практически идентичных куска, которые ты расписал по отдельности. Причем интересно, внутри класса ты юзаешь std::string, а выводишь в "не-const" char*. Такая обертка в обратную сторону. Сделано это видимо было для снижения скорости, ибо коду опять получилось столько же, сколько нужно для того, чтоб char* обработать руками ... Цитата:
Но все же это правильнее (намного), чем сорцы Кузьмича. И вообще для античата даже... можно сказать, слишком круто. Так что плюсадин. PS Цитата:
|
Код:
|
KEZ, класс писался под мой проект, и там мне надо чтобы возвращало именно char *, поэтому я его и возвращаю. Кому надо спокойно может переделать чтобы возвращало то что ему нужно ;)
Что тебе не нравится в пустом деструкторе? Чем напрягает return NULL; это одно и тоже что написать return 0; Все-равно при компиляции компилятор так и сделает, т.к. NULL определен посредством #define в 0 =\ Теперь насчет твоего кода :) Код:
Tokenize(const char * Src,const char * Tokens = "|") |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Forcer,
эта константа есть в заголовочном файле который я подключаю. поэтому напрягом по ее исопльзованию не вижу. все0равно везде заменится на 0. просто я привык при работе с указателями присваивать им NULL, а обычным переменным 0 :) KEZ, на счет деструктура ступил, мой косяк :) почему-то показалось что если нельзя объявлять класс без конструктора, то нельзя и без деструктора ) забылся ) а char * у меня там возвращается потому что используется в функциях которые требуют этот тип |
Цитата:
Цитата:
|
noobyara,
читай внимательно =\ Цитата:
|
Цитата:
почему-то показалось, что первая часть предложения несет в себе утверждение("если нельзя объявлять класс без конструктора"), возможно я не дорос до вашего возраста и мне это только кажется.. или вы имели ввиду, что при использовании конструктора обязательно должен использоваться деструктор(что тоже неправильно), тогда вы знаете, что излагать свои мысли правильно учат еще до того момента, как вы пойдете в пятый класс.. Цитата:
ухожу из темы наоффтопил и так немало, за классы спасибо. *noobyara ушел учить пятиклашек "азбуке С++".. |
... пока обсуждение не перешло в драку ...closed
|
| Время: 15:52 |