私は、テンプレートトリッキーとブースト:: anyの両方を含むライブラリを作成しています。私がわいせつネストされたシリーズに頼ることができboost :: anyとtemplates
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
:私は、私は基本的に、この持っているような状況に遭遇しました:
boost::any a1, a2, a3, a4;
を...と私はこのようになります関数を呼び出す必要がありますif文の10個の異なる型を扱っていると仮定すると、それは10,000個のif文です! Boostプリプロセッサはここで助けになるかもしれませんが、これはまだ恐ろしい解決策です。
このような狂気に頼ることなく、boost :: anyの内容でテンプレート関数を呼び出すより良い方法はありますか?私が知る限りでは、そうではありません。
ユーザーのみを:: any'インスタンスは実行時に正確な値を得ることができます(ハードコーディングされた型を提供しています)。コンパイル時に*型が削除されたため、その関数を 'boost :: any'に含まれる値で呼び出すことはできません。あなたが解決しようとしているより大きな問題は何ですか? 'boost :: any'はかなり低レベルのものです。 – GManNickG
すべての 'any'オブジェクトを1つのオブジェクトにして、一度にそれらをすべて設定するときは、正しい' somefunc'インスタンスへのポインタも安全です(例えば、 '&somefunc')。 –
Xeo
@GManNickG私が解決しようとしているより大きな問題は、一方ではLuaバインディングの自動生成と、任意の非同期関数からの結果を保持するboost :: anyです。この状況ではどちらも他のものに置き換えることはできません。 – Xtapolapocetl