1. ホーム
  2. c++

[解決済み] void*の正当な使用方法はありますか?

2023-05-11 05:08:24

質問

の正当な使用方法はありますか? void* を C++ で使うことはできますか?それとも C にあったから導入されたのでしょうか?

私の考えをまとめておくと

入力 : 複数の入力タイプを許可したい場合、関数とメソッドをオーバーロードすることができます。代わりに、共通の基本クラス、またはテンプレート(回答でこれについて言及してくれたことに感謝します)を定義することもできます。どちらの場合も、コードはより記述的になり、エラーの可能性も低くなります (ベース クラスが正常な方法で実装されている場合)。

出力 : を受け取ることを好むような状況は思いつきません。 void* を受け取ることを好むような状況は思いつきません。

私が言いたいことをはっきりさせるために。のユースケースがあるかどうかを特に尋ねているわけではありません。 void* のユースケースがあるかどうかを尋ねているのではなく、もし void* が最良または唯一の選択肢である場合。これは、以下の何人かの人々によって完璧に回答されています。

どのように解決するのですか?

void* の結果として少なくとも必要なのは ::operator new (の結果として少なくとも必要です(また、すべての operator new ...) と malloc の引数として、また配置の new 演算子として使用できます。

void* はすべてのポインタ型の共通の上位型と考えることができます。ですから、正確にはポインターの意味ではなく void へのポインタではなく、あらゆるものへのポインタを意味します。

ところで、いくつかの無関係なグローバル変数のデータを保持したい場合、いくつかの std::map<void*,int> score; と宣言した後、グローバル変数 int x;double y; そして std::string s; する score[&x]=1; そして score[&y]=2; そして score[&z]=3;

memset が欲しい void* アドレス (最も一般的なもの)

また、POSIX システムでは dlsym があり、その戻り値の型は明らかに void*