因此,我一直在研究静态函数,指针和typedef,并且碰到一堵砖墙,想知道是否有人可以提供一些见解。

我有一个类Utilsstatic ofstream称为theLog ,我有另一个类Work ,使得使用的Utils::theLog 以下是相关代码:

实用程序

#ifndef UTILS_H
#define UTILS_H

// includes

class Utils {
public:
  static ofstream theLog;

  // other code 
}
#endif

工作文件

 // includes

typedef ofstream* pOfStream;
static pOfStream l = &(Utils::theLog); // l is a lowercase L

// constructor and destructor

void Work::doSomeWork() {
    (*l) << "Hello, world!\n";
}
// other code

这会编译,并且不会出现运行时错误。 但是,定义pOfStream的原因是为了pOfStream用星号,括号和Utils::theLog填充我的代码。 当我尝试仅用l替换(*l)时: l << "Hello, world!\\n"; 我收到编译器错误。 我假设原因是运算符<<优先于* ,即使l的类型为pOfStream ,该类型被定义为指向ofstream对象的指针,但是代码不是隐式编写的*l << "Hello, world!\\n";

我的问题是,有没有一种方法可以使用提取运算符<<而不必用尖括号和星号将指针引起来? 同样,当您定义类似上面的pOfStream的类型,然后将变量var分配给类型pOfStream ,编译器是否只是阅读代码并将pOfStream任何实例pOfStreamofstream*

我一直在寻找SO和Google的答案,但我不确定如何表达问题。

===============>>#1 票数:4 已采纳

您为什么不只引用流,例如

ostream &l = Utils::theLog;
l << "Hello, World!\n";

这样,您不必使用指针。

  ask by Jonny Henly translate from so

未解决问题?本站智能推荐: