5
我希望從包含在boost mpl :: vector中的一組類中繼承。這可能嗎?元編程:從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 ::矢量這樣做呢?
我的測試程序看起來像這樣:
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);
}
接口繼承,單繼承,多重繼承,繼承_promiscuous_ :)如果只ATL的設計者不得不TMP/MPL :_) – sehe
@sehe尼斯,我會在我的詞彙中添加「混雜的繼承」:P – AJG85