![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
A12345 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Всем привет. У меня такая проблема.
Имеется скрипт на PHP, который обрабатывает текстовый файл, используя алгоритм, определённый в другом файле (см. ниже 'cat', 'dog', 'bird'). Нужно то же самое реализовать в виде консольного приложения на С++. Опыта работы с C++ у меня нет. (но есть опыт с Perl, PHP, JavaScript и т.п., из чего следует что с некоторыми структурами и синтаксисом C++ разобраться сложно) Просмотрев несколько учебников по С++, в принципе разобрался как это реализовать, но возникла проблема с постройкой главной структуры и доступа к ней (см. ниже “$this->results”). Подскажите аналог этого PHP кода, на C++:
Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
KpoHyc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.12.2006 Где: Санкт-Петербург Репутация: нет Всего: 5 |
A12345, а можно постановку задачи?
--------------------
AScript + Pascal + C -> C++ ->C#Adobe Photoshop 7.0/CS 2.0 + GIMP+ Visual Studio .NET(sp1)/2005 pro(sp1) |
|||
|
||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Задачка в общем-то интересная получается. Однако решить ее в С++ можно только с некоторой потерей гибкости - например создание объектов по имени класса придется забивать в switch, либо юзать какие-то неизвестные мне технологии RTTI по созданию объектов из строкового представления имени класса (если они вообще такие есть). Как минимум полиморфизм и наследование будет необходимо.
Теперь надо постановку задачи и ограничения на гибкость - обязательно ли создавать объекты по имени или это финт писавшего это чудо программиста. И в чем кроме этого загвоздка - тоже описать. |
|||
|
||||
KpoHyc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.12.2006 Где: Санкт-Петербург Репутация: нет Всего: 5 |
Axxent, постановкито и не хватает)
--------------------
AScript + Pascal + C -> C++ ->C#Adobe Photoshop 7.0/CS 2.0 + GIMP+ Visual Studio .NET(sp1)/2005 pro(sp1) |
|||
|
||||
A12345 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Код PHP я модифицировал -- удалил "$this->results" (см. ниже).
+ Алгоритм работы ядра программы: 1. Программа получает данные 'cat', 'dog', ‘bird’ (и/или) ($ids). 2. Проверяет, существуют ли эти классы, если да то обрабатывает текстовой файл, используя алгоритмы, описанные в этих классах (вызывая функцию "print_hello()" каждого класса). 3. Далее идёт работа с объектами $this->objects[$k], где $k имена инициализированных объектов, хранящиеся в массиве $ids. Главная задача создать код на C++, по функциональности соответствующей этому коду на PHP (он описывает ядро программы). Самая большая проблема, как сделать на C++: $this->objects[$k] = new $k; Подскажите аналог этого PHP кода, на C++ (версия 2):
Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
Axxent |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
Вот. Значит все-таки надо делать фабрику объектов. Хотя на половину своих вопросов я так и не получил ответа. Например,постановка задачи - то что надо перевести код понятно. Но его будет проще перевести если знать сразу что нужно сделать в этом коде. Подходы к проектированию в пхп и с++ сильно различаются.
Теперь start
В общем-то тут было бы лучше использовать ассоциативное множество типа map или что-нибудь в этом духе для представления аналогичных пхп ассоциативных массивов, если не разберешься то посмотрим, глядишь кто поможет. Это сообщение отредактировал(а) Axxent - 22.1.2007, 14:39 |
||||||
|
|||||||
A12345 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Не подходит. Программа будет компилироваться 1 раз. А к "cat", "dog", "bird" будут добавляться/удаляться новые "классы". В программе определить все их возможные названия невозможно. Структура программы: proga.exe + Конфигурационные файлы: cat.ini, dog.ini (может быть любое название). Например, cat.ini: [profile] name=cat info=about cat [hello] print=hello (cat) - Программа разбирает те конфиг. файлы какие у неё требуют. - Все классы делают одно и тоже, только с разными переменными. Задача будет более очевидна если классы "cat", "dog", "bird" разместить отдельно в соответствующих их названию файлах и подключать их по мере необходимости динамически, а $ids получать из серверной предопределённой переменной:
Структура: php_to_cpp_3.php cat.php dog.php bird.php Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
||||
|
|||||
A12345 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Aналоги для $this->errors и $this->clock на C++ готовы
Теперь надо как-то изменить "class OBJpair" чтобы в "second" ставить объекты (если это возможно конечно).
Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
C++ это не скриптовый язык как php, javascript итд, тут нельзя без перекомпиляции добавить новый класс, так что прийдётся это сделать как-то по-другому. Если точно известно набор возможностей, доступных такому скажем так "модулю", то можно придумать язык для описания алгоритма и написать класс, читающий его и интерпретирующий, это примерно то, что ты начал делать, но тут надо для начала знать, что именно должен делать класс, если получается настоящий язык то легче оставить всё как есть. Можно сделать по принципу плагинов, т.е. главная программа загружает "модули" = динамические библиотеки с определённым набором функций (типа process(char* filename)), тогда действительно можно динамически добавлять совершенно новые модули. Оба метода потребуют написать довольно много кода, на это уйдёт время, поэтому сначала надо бы задаться вопросом, а стоит ли оно того? Чем не устраивает решение на php? Какова задача, может можно обойтись без динамических "модулей" (_забудь_ на момент про способы, возможные в php)? ЗЫ Прочитал вот это: Т.е. я так понимаю алгоритм у всех классов один и тот же, только скажем "коты" всегда заменяют слова "кто я" на "кот" ан "собаки" на "собака"? Тогда тебе вообще только _один_ класс нужен, без наследствия, просто при инициализации нужно прочитать из файла эти переменные. Это сообщение отредактировал(а) nickless - 22.1.2007, 22:11 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Axxent |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 25.3.2004 Где: Новосибирск Репутация: 2 Всего: 5 |
В php ты также едва ли сможешь добавить новый класс без написания нового кода через одни только ini-файлы. Разница только в том что в пхп ты подключаешь файл и доволен, а в сях еще перекомпилировать приходится. Хотя последнее время с появлением инкрементальных компоновщиков, позволяющих догружать только что скомпилированный код в уже работающую программу и эта проблема может решаться на лету. Однако это таки из пушки по воробьям. Совет такой - пересмотреть приложение с позиции проектирования. Поставить задачу - в данном случае видимо больше максимизация гибкости чем минимизация времени выполнения. Рассмотреть подходящие методы и идиомы. В данном случае я бы присмотрелся к идиоме прототипов, возможно это как раз то что нужно (как уже было сказано, раз не можем на уровне языка сделать новый класс - эмулируем). Правда ограничения и тут есть - сложность кода, невысокое быстродействие... Либо же писать свой интерпретатор, но при наличии пхп под рукой это имхо неразумно. Это сообщение отредактировал(а) Axxent - 22.1.2007, 22:22 |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
A12345,
не это ли тебе нужно? -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |