gpt4 book ai didi

c++ - 元编程:从 boost mpl::vector 中的每个类继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:49 24 4
gpt4 key购买 nike

我希望继承包含在 boost mpl::vector 中的一组类。这可能吗?

具体来说,我希望为任意多个模板参数扩展 test,作为 mpl::vector 传递。

template<class T>
struct Slice
{
public:
virtual void foo(T v) const = 0;
};

struct A{};
struct B{};

template <class T1, class T2>
struct test : public Slice<T1>, public Slice<T2>
{
void foo(T1 a) const {std::cout<<"A"<<std::endl;}
void foo(T2 b) const {std::cout<<"B"<<std::endl;}
};

如果我知道只有两个参数那么我可以简单地写:

template <class mpl_vector_t >
struct test : public Slice<typename mpl::at<mpl_vector_t,mpl::int_<0> >::type >,
public Slice<typename mpl::at<mpl_vector_t,mpl::int_<1> >::type >
{
typedef typename mpl::at<mpl_vector_t,mpl::int_<0> >::type T1;
typedef typename mpl::at<mpl_vector_t,mpl::int_<1> >::type T2;

void foo(T1 a) const {std::cout<<"A"<<std::endl;}
void foo(T2 b) const {std::cout<<"B"<<std::endl;}
};

是否可以对任意的 mpl::vector 执行此操作?

我的测试程序是这样的:

int
main (int ac, char **av)
{
A a;
B b;
// test<A,B> t; //original
test<mpl::vector<A,B> > t; //mpl::vector with 2 elements
Slice<A>* Sa = &t;
Slice<B>* Sb = &t;
Sa->foo(a);
Sb->foo(b);
}

最佳答案

您想使用 mpl::inherit_linearly

关于c++ - 元编程:从 boost mpl::vector 中的每个类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413369/

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