如何过滤流入阻塞的输入

时间:2013-12-04 16:30:58

标签: c++ templates filter overloading operator-keyword

我目前正在尝试过滤流式传输到' clog' streambuffer。因此我想创建一个班级' MyClog'超载它' s<<运算符并过滤流传输到它的输入,然后将过滤后的输入转发到clog streambuffer。

过滤取决于MyClog类的内部状态。此外,我想使用模板重载运算符,所以我只需要实现一个方法。

例如

clog << "This is a Test No." << 1;

myclog << "This is a Test No." << 2

根据myclog的内部状态,消息将通过clog打印出来。

如果我没有使用模板,我的重载运算符会起作用,我做错了什么? template<typename T>template<class T>之间有什么区别?

以下是我的代码的摘录。

template<typename T>
class MyClog {

private:
bool state=false;

public:
MyClog& operator<<(const T& arg){
    if(state){
        clog << arg;
    }
    return *this;
}

1 个答案:

答案 0 :(得分:0)

template<typename T>优于template<class T>,但它们是等效的。

当你只需要模板化一个函数时,你正在模仿整个类 - 这应该有效:

class MyClog {

private:
bool state=false;

public:

template<typename T>
MyClog& operator<<(const T& arg){
    if(state){
        clog << arg;
    }
    return *this;
}