定义参数化类的联合

时间:2020-03-09 18:01:36

标签: c++ templates

我有这个简单的课程:

template<int N>
struct Conn {
    int value; //let type be `int` for simplicity
};

我需要使用任意参数定义类“ AnyConn”。 像这样:(不起作用)

typedef (template<int N> Conne) AnyConn;

或类似这样:(也不起作用)

struct AnyConn {
    template<int N> Conne d;
};

我需要隐藏参数N,使其“任意”,以便Conn <0>,Conn <12>和Conn <33>可以打包为AnyConn。 如何以正确且类型安全的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用constructor(该类型可以包含任何可复制的对象类型)来实现仅包含某些类型的对象:

std::any

您可能需要根据自己的特定要求来修改此方法,但一般来说,class AnyConn { public: template <int N> AnyConn(Conn<N> conn) : tag_(N), storage_(conn) {} int tag() const { return tag_; } template <int N> Conn<N>* get() { return std::any_cast<Conn<N>>(&storage_); } template <int N> const Conn<N>* get() const { return std::any_cast<Conn<N>>(&storage_); } private: int tag_; std::any storage_; }; 的某种形式即可完成工作。