C++ 避免 vector <bool>实例化

标签 c++ templates vector stl

我有一些关于 std::vector 的类模板:

template<typename T>
class MyClass{
public:
    // public methods;
private:
    std::vector<T> buffer_;
    // private methods and members
};

这是我的类(class)的简化版本。内部vector这里用作排序的缓冲区,不同的IO操作,依赖其单 block 内存实现如fstreams自定义缓冲区和缓冲区大小仅在运行时已知。 一切都很好,但是vector<bool>实例化绝对不适合这种目的。我想要vector<char>vector<uint8_t>而不是vector<bool>我的类里面的实例化。另外,我无法使用其他库,例如 boost、仅标准库。

有什么解决办法吗?

最佳答案

创建一个辅助类来确定 vector 的值类型(此代码使用 C++11,但可以仅使用 C++98 轻松重写):

template<typename T>
struct VectorValueType {
    using type = T;
};

template<>
struct VectorValueType<bool> {
    using type = char;
};

template<typename T>
using VectorValueType_t = typename VectorValueType<T>::type;

template<typename T>
class MyClass{
private:
    std::vector<VectorValueType_t<T>> buffer_;
};

关于C++ 避免 vector <bool>实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412348/

相关文章:

c++ - udp 服务器向特定客户端发送数据,直到收到任何 recvfrom

c++ - 继续收到错误: expected primary-expression before ' , ' token

c++ - 使用指向类 T 成员的函数指针作为模板类 <T> 函数中的参数的不良做法?

c++ - 如何对包含 pair<int,int> 元素的 vector 进行排序?根据比较功能进行排序

java - 仅当使用自定义 Vector 类时,添加负零浮点结果才为 1.0f

c++ - 在线程池中组织任务

c++ - (C++17; Boost) CMake 找不到请求的 Boost 库

html - Blogger.com : Changing Header to slideshow with HTML & Java

C++ 非类型模板参数 : Is typedef of an integral type an integral type?

python - 在 python 中索引向量列表