我有一个带有嵌套可变参数类模板的可变参数类模板。外部类模板具有一个函数模板,该模板接受任意数量的参数,并将返回类型为inner的对象。我的问题是创建一个完全独立的函数,该函数将接受这些内部类型(并且仅内部类型)的任何数量的任何变体,而与外部类型的变体无关,同时仍要确保该函数接受的类型是该函数的嵌套成员只有那个外部类模板。不知道我是否充分解释了...本质上是我正在使用的工具: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或可变参数模板(或其他)解决方案吗? 最佳答案 我认为这实际上是不可能的。您似乎想要的是执行以下操作的能力:template < typename ... Args1, typename ... Args2, typename ... Args3>?? mystery_func(Inner<Args1...>,Inner<Args2...>,Inner<Args3...>);我认为您无法做到。如果可以的话,那就是您的答案。既然我怀疑您可以这样做,那么您要做的只是取三种不同的类型,然后使用SFINAE来测试它们是否是Inner ,这与使用基本的is_a元函数一样容易:template < typename T > is_inner : boost::mpl::false_ {};template < typename ... Pack > is_inner< Inner<Pack...> > : boost::mpl::true_ {};关于c++ - 限制可变参数函数模板只接受一个可变参数类模板的嵌套可变参数类模板的变体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4413780/
10-12 18:10