0

これは私がやりたいことです:

1) データ構造をインスタンス化する関数が必要です。

void instantiateCDB(void);

2) インスタンス化されたデータ構造を更新し、データ構造への const ポインターを返す関数も必要です (読み取り専用にするため)。

これは C++/Java で実行できることを知っています。しかし、Cでも実行できますか?

私が書きたいプログラムフローは次のとおりです。

main(){
   instantiateCDB();    // Allocates a CDB 
   const struct canDataBlock * cdb = getUpdateSystem();
}

// But the best function definitions that I can come up with is this.

struct canDataBlock * instantiateCDB() {
     static struct canDataBlock cdb = {0};
     return &cdb;
}

const struct canDataBlock * getUpdateSystem() {

     struct canDataBlock * cdb = instantiateCDB();
     return &cdb;
 }

問題は次のとおりです。関数でインスタンス化された書き込み/読み取りアクセスでデータ構造にアクセスするには、instantiateCDBそれが無効であると宣言される場合、どうすればよいですか? 割り当てられたデータ構造を返す場合、ユーザーはデータ構造を変更できるため、canDataBlock整合性が失われます。私がしたいことは、関数getUpdateSystem()によってインスタンス化されたデータ構造の値を変更できることだけです。instantiateCDB()この問題を解決するにはどうすればよいですか? 私が知らないCの別のテクニックはありますか。あるなら教えてください。:)

4

2 に答える 2

2

というパターンがありopaque data pointerます。ここで役立つかもしれません。http://en.wikipedia.org/wiki/Opaque_data_typeを参照してください。

于 2013-10-06T08:45:39.150 に答える