この質問を投稿する前に、ここ、ここ、ここで言及されているアプローチに適合するように既に試みました。ただし、いくつかの調整が必要な中間関数があるため、私の要件を解決することはできませんでした。
基本的に、私が持っているものは次のとおりです。型がパラメーター パックに格納され、対応する値が配列にT
格納されている引数に基づいて、型を構築する必要があります。Args
ARGValue *ptr
ただし、タイプ from の値をARGValue* ptr
タイプ inArgs...
にマップするには、次のような中間操作を行う必要があります。
// Specialization for 1 argument
template<typename T,typename... Args>
struct instance_helper<T,1,Args...>
{
static T invokeConstructor(const ARGValue *ptr)
{
// Intermediate operation
typedef typename std::tuple_element<0, std::tuple<Args...> >::type TT;
const auto val0 = *(someUglyCast<TT*>(ptr[0])) ;
// Return the desired type
return T(val0);
}
};
//Specialization for no argument
template<typename T,typename... Args>
struct instance_helper<T,0,Args...>
{
static T invokeConstructor(const ARGValue*)
{
return T();
}
};
// General Case
template<typename T,size_t packSize,typename... Args>
struct instance_helper
{
static T invokeConstructor(const ARGValue *ptr)
{
// Do some recursive magic here for intermediate operation
return T(//Do some recursive magic) ;
}
};
これを解決するにはどうすればよいですか?Args...
からすべての型の値を安全に取得し、ARGValue*
型を構築するにはどうすればよいT
ですか?
コードが乱雑になる可能性があるため、複数の引数の特殊化を作成したくありません。