ただいまC言語の関数ポインタについて勉強をしています。
構造体で関数ポインタを宣言することで、任意の関数を実行することまではできました。
そこで、次にC++のメンバ関数のように、その関数を実行することで構造体内のメンバ変数を操作するような関数を作成したいと考えています。
現在、以下のようなコードを作成しています。
このコードでは引数に構造体のメンバ変数を与えなければ動作しません。
そこで、data.add()と実行するとx+yをリターンするような関数を作成できないかと考えています。
そのためには、引数を取らずに構造体内の変数へアクセスする必要がありますが、そのような関数を作る方法が思い浮かびません。
グローバル変数を作成する以外でそのような関数を実装する方法はあるのでしょうか?
ご返答いただければ幸いです。
C言語の関数ポインタを用いたメンバ関数もどきの実装について
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 14年前
- 住所: 東京
Re: C言語の関数ポインタを用いたメンバ関数もどきの実装について
参照が使えるのは C++ ですね。MoNoQLoREATOR さんが書きました:ではダメでしょうか?
C だとポインタで渡すことになります。
#include <stdio.h>
typedef struct calc {
int x;
int y;
int (*add)(struct calc *);
} calc;
int plus(calc *this_)
{
return this_->x + this_->y;
}
int main(void)
{
calc data;
data.x = 1;
data.y = 2;
data.add = plus;
printf("%d\n", data.add(&data));
return 0;
}
this をレジスタで渡すようですが。
Re: C言語の関数ポインタを用いたメンバ関数もどきの実装について
お二方からの回答ありがとうございます。
やはり、引数に自身のポインタを渡すしかないのですね。
教えていただいた方法をもとにプログラムを作成していこうと思います。
本当にありがとうございました。
やはり、引数に自身のポインタを渡すしかないのですね。
教えていただいた方法をもとにプログラムを作成していこうと思います。
本当にありがとうございました。