Я пишу библиотеку Unicode для C как личное упражнение. Без фактического кода у меня есть это:
typedef struct string {
unsigned long length;
unsigned *data;
} string;
// really simple stuff
string *upush(string *s, unsigned c) { ... }
// UTF-8 conversion
string *ctou(char *old) { ... }
char *utoc(string *old) { ... }
upush
помещает полную кодовую точку Unicode c
в конец s
, перераспределяя при необходимости.
Я могу использовать такой класс, например:
string a;
upush(&a, 0x44);
puts(utoc(&a));
Вместо необходимости использовать &
для передачи ссылки на функцию, есть способ, которым я могу написать, чтобы я мог вызвать:
string a;
upush(a, 0x44);
puts(utoc(a));
Или , как вы думаете, лучше просто ввести defdef string
в качестве struct string
указателя, а не самой структуры, и всегда иметь дело с struct string
указателями?
Разрешение? Благодаря Dummy00001, теперь это общий профиль моей библиотеки:
typedef struct string {
unsigned long length;
unsigned *data;
} string;
// really simple stuff
string *upush(string *s, unsigned c) { ... }
// UTF-8 conversions
string ctou(char *old) { ... }
char *utoc(string old) { ... }
Вот несколько примеров:
string a = ctou("Hello, world");
upush(&a, '!');
puts(utoc(a));
Я также узнаю, благодаря Doches, что в C ++ (для этого я и напишу оболочку для этой библиотеки), вы можете написать прототип следующим образом, чтобы выполнить неявную передачу по ссылке:
string *upush(string &s, unsigned c);
Для тех, кто заинтересован, вот мой текущий прогресс: http://delan.ath.cx/ulib