gpt4 book ai didi

c++ - 模板化固定 + 可变大小类

转载 作者:行者123 更新时间:2023-11-28 00:01:26 24 4
gpt4 key购买 nike

假设我有几个这样的容器类:

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)
};

我的问题是,我能否以某种方式(可能通过棘手的模板参数魔术)让消费类接受任何类型的容器(固定或可变大小,即使模板签名不同)?

关于模板签名的唯一保证是,如果它是固定大小的容器,它将有 2 个参数 <Type, Size>如果它是可变大小的容器,则为一个 <Type>

最佳答案

它没有您想象的那么棘手。您可以只在容器本身上制作模板:

template <class Container>
class Polygon {
Container vertices;
};

这适用于任何满足您的容器要求的东西,无论大小是否固定。

为容器选择正确的模板参数的问题转移到了实例化点,无论如何参数和类型都必须是已知的。

关于c++ - 模板化固定 + 可变大小类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702816/

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