繁体   English   中英

避免向量 <bool> 实例

[英]c++ avoid vector<bool> instantiation

我在std :: vector上有一些类模板:

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

这是我班的简化版本。 内部vector在这里用作排序,不同IO操作的缓冲区,这取决于其单个内存块的实现,例如fstreams自定义缓冲区和仅在运行时已知的缓冲区大小。 一切正常,但是vector<bool>实例化绝对不适合此类目的。 我想在类中使用vector<char>vector<uint8_t>而不是vector<bool>实例化。 我也不能使用其他的库,例如boost,standart库。

有什么解决方法吗?

创建一个辅助类来确定向量的值类型(此代码使用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_;
};

使用包装子类,如下所示:

template<typename T>
struct sub_vector: public vector<T> {};

template<>
struct sub_vector<bool>: public vector<char> {};

然后使用它代替vector

将模板专用化用于T = bool类型。 然后,对于所有类型(布尔除外),都将使用vector。

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

template <>
class MyClass<bool>
{
private:
    std::vector<char> buffer_;
};

您还需要专门化将添加的每个成员函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM