Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > PHP to C++ |
Автор: A12345 21.1.2007, 14:25 | ||
Всем привет. У меня такая проблема. Имеется скрипт на PHP, который обрабатывает текстовый файл, используя алгоритм, определённый в другом файле (см. ниже 'cat', 'dog', 'bird'). Нужно то же самое реализовать в виде консольного приложения на С++. Опыта работы с C++ у меня нет. (но есть опыт с Perl, PHP, JavaScript и т.п., из чего следует что с некоторыми структурами и синтаксисом C++ разобраться сложно) Просмотрев несколько учебников по С++, в принципе разобрался как это реализовать, но возникла проблема с постройкой главной структуры и доступа к ней (см. ниже “$this->results”). Подскажите аналог этого PHP кода, на C++:
|
Автор: KpoHyc 21.1.2007, 14:53 |
A12345, а можно постановку задачи? |
Автор: Axxent 22.1.2007, 10:54 |
Задачка в общем-то интересная получается. Однако решить ее в С++ можно только с некоторой потерей гибкости - например создание объектов по имени класса придется забивать в switch, либо юзать какие-то неизвестные мне технологии RTTI по созданию объектов из строкового представления имени класса (если они вообще такие есть). Как минимум полиморфизм и наследование будет необходимо. Теперь надо постановку задачи и ограничения на гибкость - обязательно ли создавать объекты по имени или это финт писавшего это чудо программиста. И в чем кроме этого загвоздка - тоже описать. |
Автор: KpoHyc 22.1.2007, 11:22 |
Axxent, постановкито и не хватает) |
Автор: A12345 22.1.2007, 13:20 | ||
Код 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):
|
Автор: Axxent 22.1.2007, 14:17 | ||||||
Вот. Значит все-таки надо делать фабрику объектов. Хотя на половину своих вопросов я так и не получил ответа. Например,постановка задачи - то что надо перевести код понятно. Но его будет проще перевести если знать сразу что нужно сделать в этом коде. Подходы к проектированию в пхп и с++ сильно различаются.
Теперь start
В общем-то тут было бы лучше использовать ассоциативное множество типа map или что-нибудь в этом духе для представления аналогичных пхп ассоциативных массивов, если не разберешься то посмотрим, глядишь кто поможет. |
Автор: A12345 22.1.2007, 21:27 | ||
Aналоги для $this->errors и $this->clock на C++ готовы Теперь надо как-то изменить "class OBJpair" чтобы в "second" ставить объекты (если это возможно конечно).
|
Автор: nickless 22.1.2007, 21:35 | ||
C++ это не скриптовый язык как php, javascript итд, тут нельзя без перекомпиляции добавить новый класс, так что прийдётся это сделать как-то по-другому. Если точно известно набор возможностей, доступных такому скажем так "модулю", то можно придумать язык для описания алгоритма и написать класс, читающий его и интерпретирующий, это примерно то, что ты начал делать, но тут надо для начала знать, что именно должен делать класс, если получается настоящий язык то легче оставить всё как есть. Можно сделать по принципу плагинов, т.е. главная программа загружает "модули" = динамические библиотеки с определённым набором функций (типа process(char* filename)), тогда действительно можно динамически добавлять совершенно новые модули. Оба метода потребуют написать довольно много кода, на это уйдёт время, поэтому сначала надо бы задаться вопросом, а стоит ли оно того? Чем не устраивает решение на php? Какова задача, может можно обойтись без динамических "модулей" (_забудь_ на момент про способы, возможные в php)? ЗЫ Прочитал вот это: Т.е. я так понимаю алгоритм у всех классов один и тот же, только скажем "коты" всегда заменяют слова "кто я" на "кот" ан "собаки" на "собака"? Тогда тебе вообще только _один_ класс нужен, без наследствия, просто при инициализации нужно прочитать из файла эти переменные. |
Автор: Axxent 22.1.2007, 22:13 | ||
В php ты также едва ли сможешь добавить новый класс без написания нового кода через одни только ini-файлы. Разница только в том что в пхп ты подключаешь файл и доволен, а в сях еще перекомпилировать приходится. Хотя последнее время с появлением инкрементальных компоновщиков, позволяющих догружать только что скомпилированный код в уже работающую программу и эта проблема может решаться на лету. Однако это таки из пушки по воробьям. Совет такой - пересмотреть приложение с позиции проектирования. Поставить задачу - в данном случае видимо больше максимизация гибкости чем минимизация времени выполнения. Рассмотреть подходящие методы и идиомы. В данном случае я бы присмотрелся к идиоме прототипов, возможно это как раз то что нужно (как уже было сказано, раз не можем на уровне языка сделать новый класс - эмулируем). Правда ограничения и тут есть - сложность кода, невысокое быстродействие... Либо же писать свой интерпретатор, но при наличии пхп под рукой это имхо неразумно. |
Автор: nickless 22.1.2007, 22:28 | ||
A12345,
не это ли тебе нужно? |