当前位置: 首页 > 知识库问答 >
问题:

如何重载

丰辰沛
2023-03-14
template<long long X>
class Bitset
{
    public: std::vector<unsigned char> bit = std::vector<unsigned char> ((X+7)/8);

    public:
        /* constructors */

        friend std::ostream &operator<< (std::ostream &output, const char x);
};

std::ostream &operator<< (std::ostream &output, const char x)
{
    output<<(short)(x);
    return output;
}
Bitset a;
/* code */
cout << a.bit[x];
cout << 'a';

共有1个答案

蔚丰
2023-03-14

不能重载运算符<<,以便char按您希望的方式运行。它不知道char来自哪里,因此它不能根据源代码有不同的行为。

为了按照您所希望的方式工作,您必须使bitset实现它自己的运算符[],该运算符返回代理对象,然后您可以为该代理重载运算符<<,例如:

template<long long X>
class Bitset
{
private:
    std::vector<unsigned char> bits = std::vector<unsigned char> ((X+7)/8);

public:
    /* constructors */

    class BitProxy
    {
    private:
        unsigned char &bit;

    public:
        BitProxy(unsigned char &bit) : bit(bit) {}

        BitProxy& operator=(unsigned char x) { bit = x; return *this; }
        operator unsigned char() const { return bit; }
    };

    BitProxy operator[](size_t index) { return BitProxy(bits[index]); }

    friend std::ostream& operator<< (std::ostream &output, const BitProxy &x)
    {
        output << static_cast<short>(static_cast<unsigned char>(x));
        return output;
    }
};
Bitset a;
// populate a as needed...
cout << a[x];
cout << 'a';

现场演示

 类似资料:
  • 问题内容: 我们有一个基于JBoss 7.1, JSF2 和Primefaces 3.3 的Web应用程序。 在我们的其中一个页面上,有10个项目可供显示;然后用户可以单击某种“显示更多”按钮,并且通过ajax显示更多的10个项目。用户可以单击“显示更多”按钮,直到没有其他项目可以显示为止。注意:这不是分页,每单击一次“显示更多”,显示的列表就会变长。 实际上,当用户单击按钮时,服务器将返回旧项目

  • 我想使用cv::FileStorage类将我的MarkerRemote ance结构写入文件。 我试图超载 错误消息:

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: mysql中id(auto_increment列)的碎片 我的数据库中有此列。假设其名称为“ threadid”。它包含赋予每个线程以区别的唯一ID。 线程号9 8 7 6 5 4 3 2 1 假设我已删除ID为5和6的线程。 线程号9 8 7 4 3 2 1 但是,当删除后有一个提交时,给该线程的唯一ID是10。不是5。我认为

  • 问题内容: 我对重用HttpUrlConnection(作为我正在开发的服务器和客户端之间的全状态协议的一部分)感兴趣。我知道持久性http有一个Connection = keep-alive标头。现在,我想知道如何重用这种构想。我写了这段代码: 现在如何将这个“ B”标头重新发送到服务器,我尝试重新连接等,但是没有任何效果。 服务器也执行 我看过很多论坛,但是没有人写过。也许不处理这个? 问题答

  • 问题内容: 我创建了一个自定义样式表,该样式表将覆盖Wordpress模板的原始CSS。但是,在我的日历页面上,原始CSS具有声明的每个表格单元格的高度: 有什么办法可以覆盖这个吗? 问题答案: 覆盖!important修饰符 只需使用添加另一个CSS规则,并赋予选择器更高的特异性(向选择器添加其他标签,id或类) 在比现有选择器晚的位置添加具有相同选择器的CSS规则(平局中,最后一个定义的获胜者

  • 问题内容: 我的插入符号有问题,没有获得focusGained(请参见Swing Action中的代码)到第二,插入符号就不会闪烁。JTextField并回到1st。JTextField 如何正确覆盖DefaultCaret#setBlinkRate() (不覆盖插入符号)默认情况下是文档末尾的插入符号,并在1日闪烁。获得 在win7_32b,Java7.011 / 025 / Java6上测试