gpt4 book ai didi

c++ - 防止在模板中使用某些类型

转载 作者:太空宇宙 更新时间:2023-11-04 16:12:35 25 4
gpt4 key购买 nike

我设计了自己的 std::vector 实现,我称之为 il::vector。我想:

  • 专门针对可以使用 memcpy 复制的类型( intdoublestd::array<double, n> 等等)。
  • 对不能用 memcpy 复制的类型使用不同的类例如 std::vector .在后一种情况下,如果我想用无法用 memcpy 复制的东西进行实例化,我希望出现编译时错误。 ,例如 il::vector<std::vector<double>> .

有办法吗?

PS:我总是得到这样的回答:你应该改用 std::vector。我使用自己的库的主要原因是:

  • 我想使用一个指针来构造我的 il::vector 而无需复制数据
  • 我想使用 ptrdiff_t 作为数组索引而不是这个愚蠢的 size_t。对数组索引使用无符号整数是 STL 最糟糕的想法之一。甚至 Stroustrup 似乎也反对。
  • 我想使用我自己的分配器,它们被设计成分配器,而不是这个 90 年代为不同目的而设计的奇怪模型。

抱歉有点粗鲁,但我已经厌倦了:STL是神,更不要说它不符合你的需求。

最佳答案

自 C++11 起,您可以使用 traits std::is_trivially_copyable

对于错误情况,可能会做类似的事情:

namespace il
{

template <typename T /*, typename Allocator*/>
class vector
{
static_assert(std::is_trivially_copyable<T>::value, "type should be trivially copyable");

/* Your implementation */
};

}

要选择不同的实现,您可以使用 std::conditional

template <typename T /*, typename A*/>
using myvector = typename std::conditional<std::is_trivially_copyable<T>::value,
il::vector<T>,
std::vector<T>
>::type

关于c++ - 防止在模板中使用某些类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774466/

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