c++ - 如何在构造函数中初始化 "ostream &out",使用 "char *filename"

标签 c++

请帮我在构造函数中初始化“out”?

class logger {
        ostream &out;

        public:
        logger(char *str) : out(/*How do i construct an object using str*/) {}    

        template <typename T> void print(T &obj) { out << obj; }
};

这个类将被定义为全局的,其他人只需要调用打印方法

更新: 我计划进行以下设置,类(class)用户可以 1)创建一个新的ostream对象,如果他没有。他可以创造,但他也必须管理它。所以不想给这个功能。 2)如果他已经有一个,他可以像“cout/cerr”一样传递。 3) 如果他没有通过任何“cerr”将被假定。

{

    ostream &out;

    public:
    logger() : out(cerr) {}         
    logger(ostream &o) : out(o){}
    logger(char *str) : out(/*How do i construct an object using str*/) {}

最佳答案

您无需将流声明为引用,除非您希望能够从另一个流进行初始化。可能是这样的:

class logger
{
    ofstream file;
    ostream &out;

public:
    logger(char *str) : file(str), out(file) {}
    logger(ostream &os) : out(os) {}

    // Other functions here, only using "out"
};

关于c++ - 如何在构造函数中初始化 "ostream &out",使用 "char *filename",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8226018/

相关文章:

c++ - 如何在另一个构造函数中调用对象构造函数?

c++ - 自动克隆 unique_ptr

c++ - 大 if else 语句

c++ - 为什么 C++ 中没有像符号那样的字节顺序修饰符?

c++ - 在 QGridLayout 中拉伸(stretch) QLabel

C++:在另一个函数内声明一个函数不是编译器错误所以......它是什么?

c++ - 如何编写 boost::lambda 表达式作为函数回调参数

c++ - 可以在成员初始化列表中调用虚函数吗?

c++ - 我想放弃对邮件正文所做的更改

c++ - Foreach 在 C++ 中的实现,穷人的方法