记录器系统 - 使用级别 c++
Logger system - using levels c++
如何使用来自(在 class 中包装 ostream 并模板化 << 运算符)的函数
我想为记录器使用 SEVERITY 级别,每个级别可以采用任意数量的 msg/ 元素
这个 class 接受对象中元素的任意数字,但我也需要 class 中的每个函数
例如:
ClassName ClassObject(&std::cout)
ClassObject.info() << "test msg" << 5 << 10 << endl;
这是我的class
class logger {
private:
ostream * str;
public:
logger( ostream* str_v) : str(str_v) {}
template <class T>
logger& operator<<(T&& x) {
*str << std::forward<T>(x);
return *this;
}
logger& operator<<(ostream& (*manip)(ostream&)) {
*str << manip;
return *this;
}
void info(){
cout <<"hello world"<<endl;
}
};
int main(){
logger l(&std::cout);
l << 5 << std::string(" test")<<endl;
//I want to use info like that
l.info() << "print anything" << 5 << endl;
return 0;
}
对于一个非常简单的解决方案,让 info()
写入 *str
和 return 对 *this
的引用:
logger& info()
{
*str << "info - ";
return *this;
}
那么就可以随意使用了:
l.info() << "print anything" << 5 << endl;
上面应该打印
info - print anything 5
如何使用来自(在 class 中包装 ostream 并模板化 << 运算符)的函数
我想为记录器使用 SEVERITY 级别,每个级别可以采用任意数量的 msg/ 元素
这个 class 接受对象中元素的任意数字,但我也需要 class 中的每个函数 例如:
ClassName ClassObject(&std::cout)
ClassObject.info() << "test msg" << 5 << 10 << endl;
这是我的class
class logger {
private:
ostream * str;
public:
logger( ostream* str_v) : str(str_v) {}
template <class T>
logger& operator<<(T&& x) {
*str << std::forward<T>(x);
return *this;
}
logger& operator<<(ostream& (*manip)(ostream&)) {
*str << manip;
return *this;
}
void info(){
cout <<"hello world"<<endl;
}
};
int main(){
logger l(&std::cout);
l << 5 << std::string(" test")<<endl;
//I want to use info like that
l.info() << "print anything" << 5 << endl;
return 0;
}
对于一个非常简单的解决方案,让 info()
写入 *str
和 return 对 *this
的引用:
logger& info()
{
*str << "info - ";
return *this;
}
那么就可以随意使用了:
l.info() << "print anything" << 5 << endl;
上面应该打印
info - print anything 5