gpt4 book ai didi

c++ - 限制可变参数函数模板只接受一个可变参数类模板的嵌套可变参数类模板的变体?

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:12 24 4
gpt4 key购买 nike

我有一个可变参数类模板,其中有一个嵌套的可变参数类模板。外部类模板有一个函数模板,它接受任意数量的参数并将返回一个内部类型的对象。我的问题是创建一个完全独立的函数,它将接受这些内部类型(并且仅内部类型)的任意数量的任何变体,而不管外部类型的变体,同时仍然确保函数接受的类型是嵌套成员只有那个外部类模板。不确定我是否解释得充分......这基本上是我正在使用的内容:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com