C++ 模板固定+;可变大小类
假设我有几个容器类,如下所示:C++ 模板固定+;可变大小类,c++,templates,containers,C++,Templates,Containers,假设我有几个容器类,如下所示: template<typename T> class Container { /* ... */ }; template<typename T, size_t> class Array : public Container<T> { /* Fixed-sized Container */ }; template<typename T> class Vector : public Container
template<typename T> class Container
{
/* ... */
};
template<typename T, size_t> class Array : public Container<T>
{
/* Fixed-sized Container */
};
template<typename T> class Vector : public Container<T>
{
/* Variable-sized Container */
};
模板类容器
{
/* ... */
};
模板类数组:公共容器
{
/*固定尺寸集装箱*/
};
模板类向量:公共容器
{
/*可变尺寸容器*/
};
我有一个类,它接受其中一个作为模板参数:
template<typename T, template<typename> class U, size_t M> class Polygon
{
U<T> Vertices; // Problem, what if user passes Array (it needs 2 parameters)
U<T, M> Vertices; // Problem, what if the user wants to use a variable-sized container (it needs only 1 parameter)
};
模板类多边形
{
U顶点;//问题,如果用户通过数组(它需要2个参数)怎么办
U顶点;//问题,如果用户想要使用可变大小的容器(它只需要1个参数),该怎么办
};
我的问题是,我能否(可能是通过巧妙的模板参数魔术)让消费类接受任何类型的容器(固定或可变大小,即使有不同的模板签名)
关于模板签名的唯一保证是,如果它是一个固定大小的容器,它将有两个参数
,如果它是一个可变大小的容器,它将有一个参数,这比你想象的要简单得多。您可以仅在容器本身上创建模板:
template <class Container>
class Polygon {
Container vertices;
};
模板
类多边形{
容器顶点;
};
这将适用于满足您的容器要求的任何东西,无论大小是否固定
为容器选择正确的模板参数的问题被转移到实例化点,在这里,参数和类型无论如何都必须是已知的。这比您想象的要简单得多。您可以仅在容器本身上创建模板:
template <class Container>
class Polygon {
Container vertices;
};
模板
类多边形{
容器顶点;
};
这将适用于满足您的容器要求的任何东西,无论大小是否固定
为容器选择正确模板参数的问题被转移到实例化点,在实例化点中,参数和类型无论如何都必须是已知的