我有一些关于 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/