C - 構造体内の関数 質問する

C - 構造体内の関数 質問する

内に関数を割り当てようとしていますが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 はあまり見かけません。

おすすめ記事