クラス コンストラクターのパラメーターの数と型を特定するにはどうすればよいでしょうか。メンバー関数に対してこれを行うのは簡単なことです。
template <class T, typename P0, typename P1, typename P2, typename P3>
void BindNativeMethod( void (T::*MethodPtr)(P0, P1, P2, P3) )
{
// we've got 4 params
// use them this way:
std::vector<int> Params;
Params.push_back( TypeToInt<P0>() );
Params.push_back( TypeToInt<P1>() );
Params.push_back( TypeToInt<P2>() );
Params.push_back( TypeToInt<P3>() );
}
template <class T, typename P0, typename P1, typename P2, typename P3, typename P4>
void BindNativeMethod( void (T::*MethodPtr)(P0, P1, P2, P3, P4) )
{
// we've got 5 params
// use them this way:
std::vector<int> Params;
Params.push_back( TypeToInt<P0>() );
Params.push_back( TypeToInt<P1>() );
Params.push_back( TypeToInt<P2>() );
Params.push_back( TypeToInt<P3>() );
Params.push_back( TypeToInt<P4>() );
}
他のメンバーについても同様です。
しかし、クラス コンストラクターをどうするのでしょうか。引数の型を調べる方法はありますか? コンストラクターのアドレスを取得することさえ不可能であるため、これを解決するための根本的に異なるアプローチがあるのではないでしょうか?
編集:すべてのソースファイルをスキャンし、すべてのクラス、メソッド、ctor、およびそれらの正確なプロトタイプのデータベースを持つ C++ プリプロセッサがあります。これに基づいていくつかのスタブを生成する必要があります。