我有这个简单的课程:
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。 如何以正确且类型安全的方式做到这一点?
答案 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_;
};
的某种形式即可完成工作。