LINUX.ORG.RU

C-аналог C++ STL


0

0

Задался мыслью. В С++ есть STL - поэтому не нужно каждый раз для нового типа писать
реализацию связного списка и бинарного дерева.
Есть ли такая или схожая по возможностям библиотека для С?
Вроде бы это реализуемо на макросах и идея лежит на поверхности - так что
кто-нибудь обязательно это дело уже сделал.
А то попробовал на чистом С по-программить - после С++ и STL чувствую
себя как аквалангист, потерявший ласты (знающие люди ощущение поймут)

на сишном препроцессоре что-то супер не сделаешь. Он слишком слаб. Что ты хочешь от препроцессора который даже выражения вычислять не умеет??

То есть например ты даже простейшие функторы не сможешь сделать.

Функтор сабскриптинга вроде делается. Чтобы ты пейсал SUBSCR( arr ) и потом эта штука будучи примененной к i: SUBSCR( arr )( i ) давала arr[i]. Это получится, но более сложные вещи не получатся.

Функтор который делает композицию двух унарных функторов ты не напишешь. То есть допустим у тебя есть унарные функторы SUBSCR( arr1 ) и SUBSCR( arr2 ). Ты хочешь сделать композицию его с самим собой чтобы можно было писать:

UNARY_COMPOSE( SUBSCR( arr1 ), SUBSCR( arr2 ) )( i ) и получалось arr1[arr2[i]]. Ты такое не напишешь.

Плюсы и родились как новый препроцессор к Си, только не в ту сторону пошли. Да и сам Си дерьмо.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

во, для единообразной записи многих циклов:):

#define PASS_ARR( PTR, SIZE, ARG, FIX, POST, ACT ) \ { \ int i; \ for ( i = (SIZE); i--; ) \ { \ POST( (PTR)[ARG] FIX ) ACT; \ } \ }

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Меня в основном пока-что интересуют более приземленные вещи -
типа STL-евских контейнеров и итераторов.
Т.Е. хочется чего-то типа
#include <llist_macros.h>
struct Rec_{
char* FIO;
int age;
float rating;
};
typedef struct Rec_ Record;


DEF_LLIST(Record);
Record new_rec;

Record_List records;
while(!feof(stdin)){
if(scanf("%s %d %f",&newrec.FIO,&newrec.age,&newrec.rating) != 3) break;
Record_List_push_back(&records,&newrec);
}

Ну и т.д.

Flogger_d
() автор топика
Ответ на: комментарий от Flogger_d

Упс... прогнал слегка - прошу прощения на глюки с памятью особого внимания не обращать...
Это все-таки не реальная программа, а пример функциональности, которую я бы хотел от подобной библиотеки...

Flogger_d
() автор топика

Некоторые типы данных, как списки, деревья, реализованы в glib, например.

Таких библиотек несколько, но, к сожалению, не одна из них стандартом не стала.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.