gpt4 book ai didi

c++ - 我需要我的 vector 的最大大小(我给的值)C++

转载 作者:行者123 更新时间:2023-11-30 01:37:12 27 4
gpt4 key购买 nike

我有以下代码:

固定大小的 vector :

template <typename T, size_t siz>
struct fixVec : public std::vector<T> {
void push_back(const T& d) {
if (std::vector<T>::size() >= siz) throw std::bad_alloc();
std::vector<T>::push_back(d);
}
};

我这样使用“fixVec”:

ClonableHeteroStore<ClonableTestClass, fixVec<ClonableTestClass*, 1>, MyException> t1;

它创建一个大小为 1 的 vector 。(1)

EXPECT_NO_THROW(t1.add(new ClonableTestClass));

它添加了 1 个元素,很好,没有错误。 (2)

EXPECT_THROW(t1.add(new ClonableTestClass), MyException);

这里应该抛出异常。 (3)

我的问题是:当我到达我的 vector 的“max_size()”时如何检查。不是我的 PC 可以处理的 vector 的最大大小。或者我怎样才能取回我在代码 (1) 中给出的值(! 之间的数字):

ClonableHeteroStore<ClonableTestClass, fixVec<ClonableTestClass*, !!!1!!! >, MyException> t1;

我有一个名为 ClonableHeteroStore 的类,其中包含以下代码:

template <typename T1, class S, typename PRED = int>
class ClonableHeteroStore
{
private:
S flakker;
size_t currently;
size_t maxi;
public:
ClonableHeteroStore() : { currently = 0; maxi = 0; }

void add(T1 *rhs)
{
if (currently < ???????? )
{
flakker.push_back(rhs);
currently++;
}
else
{
delete rhs;
throw PRED();
}
}

它应该做什么:如果我们没有达到我们在代码 (1) 中给出的 vector 的最大大小,它应该向 vector 添加一个新元素。如果我们达到了我们在代码 (1) 中给出的限制,它应该丢弃异常。

所以 (2) 行不会有任何问题,因为 vector 的大小为 1,这是我们放入其中的第一个元素。 “if”部分应该运行。

(3) 行将抛出异常,因为它试图放置第二个元素,但 vector 大小为 1。 “else”部分应该运行。

唯一可以更改的代码是 ClonableHeteroStore 类。我应该以某种方式找出我的 vector 有多大。我读了很多 vector 动态分配它的大小等,但在这种情况下,如果我跳过限制 (1),它必须抛出异常。

感谢您的帮助!

最佳答案

从类型中提取模板参数的两种常见解决方案是使用部分显式特化的类型特征或使用函数模板从函数参数中推导出模板参数。基于函数的方法包括编写一个需要 fixVec<T, I> 的函数。并让编译器推断出 I :

// The compiler will deduce T and I from the argument
template<class T, size_t I>
size_t get_vec_size(const fixVec<T, I> &) {
return I;
}

void foo()
{
fixVec<char, 10> my_vec;
const auto my_vec_max_size = get_vec_size(my_vec);
}

要使用部分显式特化,您需要编写一个新模板并将其特化为您需要其模板参数的类型,然后再次让编译器为您推导这些参数:

template<class T>
struct vec_size {};

template<class T, size_t I>
struct vec_size<fixVec<T, I>> : std::integral_constant<size_t, I> {};

void foo()
{
fixVec<char, 10> my_vec;
const auto my_vec_max_size = vec_size<decltype(my_vec)>::value;
}

关于c++ - 我需要我的 vector 的最大大小(我给的值)C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50140963/

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