Доброго времени суток!
Появилась идея, практической реализации которой мне порой не хватает. (Может уже есть реализация, но я не нашел. Если кто знает подскажите.) Назавем пока ее условно C++BusyLib.
Многим доводилось работать с командным интерпретатором типа BASH. И те кто работа завсегда могут подтвердить насколько это легко и просто. Например, чтобы вывести из файла a.txt упорядоченные строки начинающиеся с rsdn необходимо написать всего лишь
cat a.txt | grep rsdn | sort
Конечно эту задачу можно реализовать и множеством других способов (и эта реализация будет гораздо эффективней), но для этого надо либо использовать стандартные библиотеки/функции/классы (правда код будет несколько длиннее), либо сторонние (их еще надо найти и понять).
Моя же идея заключается в разработке библиотеки, работа с которой будет во многом похожа на работу с BASH (что будет особенно приятно новичкам хорошо знающим shell, но слабым в С++), т.е. код на С++ будет выглядеть примерно так:
uses BusyLib
cat ("a.txt") | grep ("rsdn") | sort;
Собственно переопределение операторов operator() и | для соответствующих классов.
Хотелось бы узнать Ваше мнение относительно этой идеи. Советы, дополнения, пожелания и т.п.
Здравствуйте, Janis, Вы писали:
uses BusyLib
cat ("a.txt") | grep ("rsdn") | sort;
А я делаю так:
system("cat a.txt|grep rsdn|sort");
Здравствуйте, Janis, Вы писали:
J>Собственно переопределение операторов operator() и | для соответствующих классов.
J>Хотелось бы узнать Ваше мнение относительно этой идеи. Советы, дополнения, пожелания и т.п.
Идея, на самом деле, очень хорошая. Почти весь синтаксис shell-команд прекрасно ложится на перегружаемые операторы C++
Имеет смысл еще посмотреть на Microsoft PowerShell (
http://en.wikipedia.org/wiki/PowerShell), где используется похожая идеология.
yvb>А я делаю так:
yvb>yvb>system("cat a.txt|grep rsdn|sort");
yvb>
Разумеется этот код можно заставить работать доже под Windows (установив соответствующие компоненты), но используя перегрузку мы легко можем получить следующий код:
CMyWindow wnd;
cat ("a.txt") | grep ("rsdn") | sort > wnd;
и вывести результат в нужное окно.
Кстати, не знаю почему я никогда не встречал для классов типа CEditWnd перегрузку оператора <<... Я уже давно для себя реализовал класс CStreamWnd. Очень удобно для окон логирования и т.п.
http://sourceforge.net/projects/unxshbox — собственно работающий прототип моей идеи.