私はvariadicクラステンプレートを持っています。これは入れ子になったvariadicクラステンプレートを持っています。外部クラステンプレートには、任意の数の引数を受け入れ、内部型のオブジェクトを返す関数テンプレートがあります。私の問題は、外部型のバリエーションにかかわらず、これらの内部型(および内部型のみ)の任意のバリエーションを受け入れる完全に別個の関数を作成することです。その外側のクラステンプレートのみ。ではない私は十分に...ここで私が働いている何を本質的だと説明したかどうかわから:variadic関数テンプレートは、1つのvariadicクラステンプレートのネストされたvariadicクラステンプレートのバリエーションのみを受け入れるように制限しますか?
template<typename... ArgsOuter> class Outer {
typedef Outer<ArgsOuter...> outer_t;
template<typename... ArgsInner> class Inner {
//static const outer_t* outer;
typedef outer_t outer;
Inner(const ArgsInner&... args_inner) {
//do stuff
}
};
/*
What's passed in here will be related to and will be a subset of
the types used to define the Outer class, but I'm not really
concerned about checking what's being passed in right now.
*/
template<typename... ArgsFunc>
make_inner(ArgsFunc... args_func) {
return Inner<ArgsFunc...> (args_func...);
}
};
struct ThingA : Outer<int, int, float> {
};
struct ThingB : Outer<int, string, int> {
};
struct ThingC : Outer<string, string, int, int> {
};
//struct ThingN : Outer<random types...> {}
//...meanwhile, over at main...
ThingA tA;
ThingB tB;
ThingC tC;
auto tA_inner = tA.make_inner(1, 1.1);
auto tB_inner = tB.make_inner(2, "foo");
auto tC_inner = tC.make_inner("bar", 2, "foobar");
//mystery_func() is the function I'm not sure how to define.
auto meatloaf = mystery_func(tA_inner, tB_inner, tC_inner);
誰でもこのためSFINAEまたは可変引数関数テンプレート(または他の)解決策がありますか?
返品の種類は素晴らしいです。 – Griwes