内に関数を割り当てようとしていますがstruct
、これまでのところ次のコードがあります:
typedef struct client_t client_t, *pno;
struct client_t
{
pid_t pid;
char password[TAM_MAX]; // -> 50 chars
pno next;
pno AddClient()
{
/* code */
}
};
int main()
{
client_t client;
// code ..
client.AddClient();
}
**Error**: *client.h:24:2: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token.*
どちらが正しいやり方でしょうか?
ベストアンサー1
直接実行することはできませんが、関数ポインターを使用して「this」パラメータを明示的に渡すことで同じことをエミュレートできます。
typedef struct client_t client_t, *pno;
struct client_t
{
pid_t pid;
char password[TAM_MAX]; // -> 50 chars
pno next;
pno (*AddClient)(client_t *);
};
pno client_t_AddClient(client_t *self) { /* code */ }
int main()
{
client_t client;
client.AddClient = client_t_AddClient; // probably really done in some init fn
//code ..
client.AddClient(&client);
}
しかし、実際には、これを実行してもあまりメリットはありません。外部関数を呼び出してインスタンスを渡すだけなので、このスタイルで実装された C API はあまり見かけません。