我在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库。
有解决方法吗?
答案 0 :(得分:4)
创建一个辅助类来确定向量的值类型(此代码使用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_;
};
答案 1 :(得分:2)
使用包装器子类,如下所示:
template<typename T>
struct sub_vector: public vector<T> {};
template<>
struct sub_vector<bool>: public vector<char> {};
然后只使用它代替vector
。
答案 2 :(得分:-1)
对T = bool类型使用模板特化。 然后对于除bool之外的所有类型,使用vector。
template <typename T>
class MyClass
{
private:
std::vector<T> buffer_;
};
template <>
class MyClass<bool>
{
private:
std::vector<char> buffer_;
};
您还需要专门化您要添加的每个成员函数。