我有一个可变参数类模板,它有一个嵌套的可变参数类模板。外部类模板有一个函数模板,它接受任意数量的参数并将返回一个内部类型的对象。我的问题是创建一个完全独立的函数,该函数将接受这些内部类型的任意数量的任何变体(并且仅接受内部类型),而不管外部类型的变体如何,同时仍确保函数接受的类型是嵌套成员只有那个外部类模板。不确定我是否充分解释了......这基本上是我正在使用的内容:
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 或可变参数函数模板(或其他)解决方案吗?