LINUX.ORG.RU

В Си структуры обычно перед использованием через memset заполняются
 нулями, либо инициализируются статически при определении:

typedef struct {
   int i;
   char s[16];
} struct_type;

#define STRUCT_INIT {0, "default"}

struct_type struct_var = STRUCT_INIT;

anonymous
()
Ответ на: комментарий от aa5779

aa5779(*) (06.10.2004 14:06:58):

> нельзя. Да и в C++, строго говоря, нельзя. Это вам не Common Lisp.

Может, такое подойдет?:

#include <stdio.h>

typedef struct { int i; char s[16]; } struct_type;

int main(void) { struct_type p = {1,"ququ"}; printf("p.i=%d, p.s='%s'\n",p.i,p.s); return 0; }

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

Хотелось попробовать, чтобы при создании экземпляра структуры всем элементам структуры - ссылкам на функции - были присвоены значения. Сами функции объявлены как extern в другом модуле. Можно написать функцию инициализации, но это не лучший для меня способ. Что бы сделать?

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

Tsahes (*) (06.10.2004 16:42:55):

Ну, это и есть ЦеПП.

Конечно, можно инициализировать структуру макросом. Типа,
typedef int MYFUNCTTYPE(int);
...
int concretefunct(int i)
{
...
}

typedef struct superstruct{
...
MYFUNCTTYPE *thefunct;
...
}SUPERSTRUCT;


#define SUPERSTRUCTINIT(v) SUPERSTRUCT v={..., thefunct=&concretefunct; ...}

И далее, чтобы создать переменную thesuperstruct типа struct superstruct,
говорим

SUPERSTRUCTINIT(thesuperstru);

IMHO -- извращение.

Die-Hard ★★★★★
()
Ответ на: комментарий от Tsahes

Конструктор

> Хотелось попробовать, чтобы при создании экземпляра структуры всем элементам структуры - ссылкам на функции - были присвоены значения. Сами функции объявлены как extern в другом модуле. Можно написать функцию инициализации, но это не лучший для меня способ. Что бы сделать?

IMHO наиболее логичный вариант в C++ -- создать конструктор для структуры.

DKorolkov
()
Ответ на: комментарий от no1sm

тока это только в си можно, в смысле в c++ не покатит.

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