【发布时间】:2016-04-12 18:54:44
【问题描述】:
我正在尝试编写一个包含位数组(作为成员变量)的 C++ 模板类。位数组的大小在编译时是已知的,所以我真的很希望它是一个std::bitset,但我很难编写一个operator[] 函数来设置位.
例如,我希望我的班级以这样的方式开始:
template<size_t N>
class bitvector
{
public:
bool operator[](size_t i) const { return bits[i]; }
bool& operator[](size_t i) { return bits[i]; }
private:
std::bitset<N> bits;
};
吸气剂工作正常。问题是std::bitset::operator[] setter 函数返回一个std::bitset::reference(不是bool&),它本身就是模板化的。我对模板不太熟悉,但以下尝试失败了:
template<size_t K>
std::bitset<K>::reference operator[](size_t i) { return bits[i]; }
出现以下错误need 'typename' before 'std::bitset<K>::reference' because 'std::bitset<K>' is a dependent scope。我尝试了一些谷歌搜索,但无济于事。
std::bitset 是适合此任务的工具吗?如果是这样,我该如何编写setter函数?如果没有,我可以用什么代替? (我仍然希望它实际存储为位,std::vector<bool> 似乎不太正确,因为我希望在编译时严格固定数组大小)。
【问题讨论】:
-
我不明白。
std::bitsethas anoperator[],那你为什么要重新发明轮子? -
似乎错误是不言自明的。添加
typename before...。那么你为什么不尝试这样做呢? -
@ThomasMatthews:可能是演示问题的大型类的最小版本。
-
@ThomasMatthews 正如另一条评论中指出的那样,我试图从一个更大的课程中举一个最小的例子。
-
@NowhereMan 当然,我确实尝试过这样做,但它产生了许多新错误,似乎将我引向了错误的方向。
标签: c++ arrays bitwise-operators std-bitset