C++ BusyBox
От: Janis Россия  
Дата: 27.07.07 08:52
Оценка:
Доброго времени суток!

Появилась идея, практической реализации которой мне порой не хватает. (Может уже есть реализация, но я не нашел. Если кто знает подскажите.) Назавем пока ее условно C++BusyLib.

Многим доводилось работать с командным интерпретатором типа BASH. И те кто работа завсегда могут подтвердить насколько это легко и просто. Например, чтобы вывести из файла a.txt упорядоченные строки начинающиеся с rsdn необходимо написать всего лишь
cat a.txt | grep rsdn | sort

Конечно эту задачу можно реализовать и множеством других способов (и эта реализация будет гораздо эффективней), но для этого надо либо использовать стандартные библиотеки/функции/классы (правда код будет несколько длиннее), либо сторонние (их еще надо найти и понять).

Моя же идея заключается в разработке библиотеки, работа с которой будет во многом похожа на работу с BASH (что будет особенно приятно новичкам хорошо знающим shell, но слабым в С++), т.е. код на С++ будет выглядеть примерно так:
uses BusyLib
cat ("a.txt") | grep ("rsdn") | sort;

Собственно переопределение операторов operator() и | для соответствующих классов.

Хотелось бы узнать Ваше мнение относительно этой идеи. Советы, дополнения, пожелания и т.п.
Re: C++ BusyBox
От: yvb  
Дата: 27.07.07 21:38
Оценка:
Здравствуйте, Janis, Вы писали:

uses BusyLib
cat ("a.txt") | grep ("rsdn") | sort;


А я делаю так:
system("cat a.txt|grep rsdn|sort");
Re: C++ BusyBox
От: Cyberax Марс  
Дата: 27.07.07 22:07
Оценка:
Здравствуйте, Janis, Вы писали:

J>Собственно переопределение операторов operator() и | для соответствующих классов.

J>Хотелось бы узнать Ваше мнение относительно этой идеи. Советы, дополнения, пожелания и т.п.
Идея, на самом деле, очень хорошая. Почти весь синтаксис shell-команд прекрасно ложится на перегружаемые операторы C++

Имеет смысл еще посмотреть на Microsoft PowerShell (http://en.wikipedia.org/wiki/PowerShell), где используется похожая идеология.
Sapienti sat!
Re[2]: C++ BusyBox
От: Janis Россия  
Дата: 30.07.07 07:17
Оценка:
yvb>А я делаю так:
yvb>
yvb>system("cat a.txt|grep rsdn|sort");
yvb>


Разумеется этот код можно заставить работать доже под Windows (установив соответствующие компоненты), но используя перегрузку мы легко можем получить следующий код:
CMyWindow wnd;
cat ("a.txt") | grep ("rsdn") | sort > wnd;

и вывести результат в нужное окно.

Кстати, не знаю почему я никогда не встречал для классов типа CEditWnd перегрузку оператора <<... Я уже давно для себя реализовал класс CStreamWnd. Очень удобно для окон логирования и т.п.
Re: UnxShBox
От: Janis Россия  
Дата: 21.11.07 08:52
Оценка:
http://sourceforge.net/projects/unxshbox — собственно работающий прототип моей идеи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.