gpt4 book ai didi

c++ - 这个预处理器指令在这里可以接受吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:13 25 4
gpt4 key购买 nike

有一个单例 Logger 类,我觉得每次调用 print 方法时都编写 Logger::GetInstance() 很丑陋。我能想到的唯一解决方案是#define。有没有更好的方法,或者这个宏在这种情况下是否合理?

#include <iostream>
#include <fstream>

class Logger
{
public:

static Logger& GetInstance();
~Logger();
template <typename T>
void Print(const T &t);
void SetNewline(bool b);
void SetLogging(bool b);

private:

Logger();
Logger(const Logger&);
void operator=(const Logger&);

bool newline;
bool log;
std::ofstream file;
};

int main()
{
#define logger Logger::GetInstance()
logger.Print("Hello");
//Logger::GetInstance().Print("Hello");
}

最佳答案

请注意,由于您显然是在“本地”定义宏,因此宏不考虑范围

为什么不定义一个函数而不是宏:

inline
auto logger() -> Logger& { return Logger::GetInstance(); }

然后你就可以写了

logger().Print( "Hello" );

关于c++ - 这个预处理器指令在这里可以接受吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com