C++で次のことが可能かどうかを知りたい。私はstd::string
のキーを持つデータメンバーとしてstd::map
を格納するクラスを構築する必要があり、値は関数ポインタです。事は重要なビットは、私ということであるフォームバリアントポインタ関数を持つクラスをメンバにするには?
template<class... Args> f(Args...);
の機能を指し、すなわち、私はこれらの関数ポインタが、彼らは任意の数の引数を受け入れる機能を指している必要がありますという意味で可変引数になりたいということです私のクラスの特定のインスタンスのマップ内の異なる関数ポインタのために異なる引数を持つことができるようにしたい。たとえば、クラスのオブジェクトを作成し、そのマップに2つのペアを含めると、1つは(double, int)
を引数とする関数に対応し、もう1つは(std::vector, int, int)
を引数として持つことができます。おそらく異なる引数リストを使ってマップに新しい要素を追加できるようにしたいという意味で、この一般的なものを作りたいと思っています(私はコンパイル時にしか行いませんが、まだコードを書く必要があります私は他のファイル/クライアントからの新しい要素を追加したいので、型について知らないクラス)。
これを実装する最良の方法は何ですか?あなたが傾くと言って、すべての人のために
どのようにしてそのマップから関数を呼び出しますか?ほとんどのソリューションは、あらゆる種類のコンパイル時の型安全性を低下させます。関数ポインタを格納するために 'std :: any'を使用できますか? –
タイプ消去の仕事のように聞こえます。 –
'f'を関数ポインタに変換すると、固定数のパラメータと型を持つ具象関数になります。テンプレートは保存できません。 – nwp