所以我一直在研究静态函数,指针和typedef,并且碰到一堵砖墙,想知道是否有人可以提供一些见识。
我有一个带有Utils
的static 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
的原因是为了避免用星号,括号和Utils::theLog
填充我的代码。当我尝试仅用(*l)
替换l
时,如下所示:l << "Hello, world!\n";
我收到编译器错误。我假设原因是运算符<<
优先于*
,即使l
的类型为pOfStream
,其类型被定义为指向ofstream
对象的指针,但是该代码不是隐式编写的*l << "Hello, world!\n";
。我的问题是,有没有一种方法可以使用提取运算符
<<
而不用用圆括号和星号将指针引起来?同样,当您定义类似上面的pOfStream
的类型,然后将变量var
分配给pOfStream
类型时,编译器是否仅读取了代码并将pOfStream
的任何实例替换为ofstream*
?我一直在搜索SO和Google寻找答案,但我不确定如何表达问题。
最佳答案
您为什么不只引用流,例如
ostream &l = Utils::theLog;
l << "Hello, World!\n";
这样,您不必使用指针。