2012-02-28 8 views
0

他のタイプのデータ(構造体またはsth)を使用して関数を作成する方法はありますか? C++にはテンプレートがありますが、C?ansi Cのテンプレート?

私はvoid *について聞いていますが、うまくいけば分かりません。

アイデア?

+1

[私はCでC++で書いたこの汎用関数を書き換える最善の方法は何ですか?](http://stackoverflow.com/questions/7287086/whats-the-best-way-to-rewrite-this –

+0

はい、 'void *'は単なる汎用ポインタなので、(例えば)汎用のデータ構造を書くことができればそれを使うことができます。すでに割り当てられている任意の構造体へのポインタをとります。しかし、あなたのユースケースが何であるかはっきりしていません。あなたの質問を編集して、あなたがしようとしていることをより詳しく説明できますか? – mpontillo

答えて

-1

void *は、いずれのポインタもと同じです(void *)。もちろん、型の安全性はありませんが、Cで手に入れることができるほど抽象度が高いです。さらに、stdarg.hとvariadic関数を見ることができますが、やはり自分が何をしているのかを把握する必要があります。コンパイラはあなたを1ビット助けません。

+4

"実際には、"どのポインタも 'void *'と同じ 'sizeof()'を持っているわけではありません。ワードポインターとバイトポインターは、ポインターとオブジェクトポインターを機能させることができるので、異なるサイズを持つことができます。 「あらゆるオブジェクトポインタを安全に 'void *'と 'back 'に変換することができます。 – ruakh

+0

よく気づいた。私のやっていることをhttp://elf.cs.pub.ro/so/wiki/laboratoare/resurse/injections#casting-pointers-to-class-functions-to-voidで見てください。 :) – foxx1337

2

は、で、void *です。関数ポインタを使う必要があるかもしれません。たとえば、一般的な値を比較する必要がある場合です。

もう1つの方法は、xmacrosを使用することですが、これは一般に、非常に類似した構造のコード複製を減らすためです。

関連する問題