当前位置: 首页 > 知识库问答 >
问题:

在C++中调用一个没有直接引用的函数是可能的吗?

艾弘义
2023-03-14

这里是初学者

我正在尝试为我的C++学习项目制作一个“记录器”,我已经设置了代码来管理日志记录本身,但是我无法从其他类获得该功能

这是我的“调试器”类

class MSEdebug
    {

        MSEdebug(){logOutput.open("log.txt");}

        ~MSEdebug() { logOutput.close(); }

        void debuglog(std::string info)
        {
#ifdef DEBUG
            std::cout << "LOG:" << info << std::endl;
#endif // DEBUG
            logOutput << "LOG:" << info << "\n";
        }

        std::ofstream logOutput;


    };

我想做的是:

#include "MSE_debug.h"

//...

MSEapp::debugTest()
{

     MSEdebug::debuglog("Test, 1, 2, 3...");

}

现在这是行不通的,你们有经验的C++程序员可能已经在翻白眼了,但你能不能好心告诉我,我将如何使它工作。

顺便说一句,我希望我做的对,这是我的第一个问题,所以我很抱歉如果它是坏的

共有2个答案

华化
2023-03-14

这可能是一个单例可能是有序的情况:

class MSEdebug {
private:
    MSEdebug(){ logOutput.open("log.txt"); }

    ~MSEdebug() { logOutput.close(); }
public:
    static MSEdebug& instance(){
        static MSEdebug debug;
        return debug;
    }
    void debuglog(std::string info) {
#ifdef DEBUG
        std::cout << "LOG:" << info << '\n';
#endif // DEBUG
        logOutput << "LOG:" << info << '\n';
        }
private:
    std::ofstream logOutput;
};

用法如下:

#include "MSE_debug.h"

//...

MSEapp::debugTest()
{
     MSEdebug::instance().debuglog("Test, 1, 2, 3...");
}
何章横
2023-03-14

规范的方法是使用singleton模式来拥有msedebug类的唯一实例,该实例很容易访问。

class MSEdebug
    {

        MSEdebug(){logOutput.open("log.txt");}
    public:
        ~MSEdebug() { logOutput.close(); }

        void debuglog(std::string info)
        {
#ifdef DEBUG
            std::cout << "LOG:" << info << std::endl;
#endif // DEBUG
            logOutput << "LOG:" << info << "\n";
        }
        static MSEdebug& getInstance() {
            static MSEdebug instance;

            return instance;
        }
    private:
        std::ofstream logOutput;
    };

然后您可以这样使用它:

     MSEdebug::getInstance().debuglog("Test, 1, 2, 3...");
 类似资料:
  • 问题内容: 我需要针对将返回零或一的数据库运行查询(检查是否存在特定条件)。我已获得审查的技术规范指出,我应该创建一个存储过程,该存储过程将返回单行,并带有称为“结果”的单列,该列将包含0或1的位值。我不确定存储过程将是最好的方法,但是不确定一点,所以我想请教您一些意见。我可以想到的两个选择是: 1:创建一个SQL标量值函数,该函数执行查询并返回一点。然后,可以使用“ TEXT” SqlComma

  • 我试图将一个向量元组转换成一个向量元组(反之亦然)。调用函数时遇到问题。当我用一个参数调用它时,我得到一个错误: prog。cpp:在函数“int main()”中: prog。cpp:44:24:错误:调用“tuple_transpose(std::tuple)”时没有匹配函数 这是一个演示,其中包含错误:http://ideone.com/7AWiQQ#view_edit_box 我做错了什么

  • null 我可以推断,在Java中,这种类型的方法可以应用于带有一个参数的函数接口。 还有,有没有一个参数函数接口的例子,函数有一个参数,不像上面的例子?

  • 我不明白为什么下面的代码会打印两次。我以为应该是个人和学生。当通过“a”对象调用printPerson()内部的getInfo()时,为什么要调用Person类内部的一个,为什么不调用Student类中的一个?提前谢谢。

  • 一个trait中的静态函数可以调用同一trait中的另一个静态函数吗?假设我有以下特点: 那不行。代码不能在这里编译。 此外,没有类型让我使用完全限定的语法,如