声明/定义自定义类 cout 对象的正确方法

2023-11-24

我创建了自己的std::cout类似于将两者写入的对象std::cout并写入日志文件。

我目前在头文件中像这样定义它,但我收到了未使用的变量警告。

头文件<MyLib/Log.h>

static LOut { };
static LOut lo;

template<typename T> inline LOut& operator<<(LOut& mLOut, const T& mValue)
{
    std::string str{toStr(mValue)};
    std::cout << str;
    getLogStream() << str;
    return mLOut;
}

Usage:

#include <MyLib/Log.h>
...
lo << "hello!" << std::endl;

Should lo be static?应该lo be extern?

感谢您解释声明的正确方法cout-like 对象并展示主要标准库实现如何做到这一点。


编辑:由cout-like 对象,我的意思是包含相应标头后始终可用的全局变量。


std::cout简单声明如下:

namespace std {
    extern ostream cout;
}

它是一个常规的全局变量;你自己也可以做同样的事情。放一个extern在标头中声明变量;然后在源文件中定义相同的变量并将其链接到您的应用程序:

// mylog.h
extern MyLog mylog;

// mylog.cpp
MyLog mylog(someparams);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明/定义自定义类 cout 对象的正确方法 的相关文章

  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • asp.net core http 如果没有内容类型标头,则删除 `FromBody` 忽略

    我在 http 中使用 bodyDELETE要求 我知道目前删除主体是非标准的 但是允许的 使用时出现问题HttpClient它不允许删除请求的正文 我知道我可以使用SendAsync 但我宁愿让我的 API 更加灵活 我希望这个机构是可选
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有

随机推荐

  • 尝试使用 numpy 向量化迭代计算

    我试图通过使用 numpy 中的向量化形式来使某些代码更有效 让我给你举个例子 这样你就明白我的意思了 给出以下代码 a np zeros 4 4 a 0 1 2 3 4 for i in range len a 1 a i 1 2 a i
  • 通过 Rails 迁移添加数据库列并基于另一列填充它

    我正在编写一个迁移以向表中添加一列 该列的值取决于另外两个现有列的值 最好 最快的方法是什么 目前我有这个 但不确定这是否是最好的方法 因为组表可能非常大 class AddColorToGroup lt ActiveRecord Migr
  • 有效 Cookie 值的明确指南

    我知道还有其他问题 但他们的答案似乎是假设而不是确定的 我有限的理解是cookie值是 分号已用于分隔单个 cookie 中的 cookie 属性 等号用于分隔 cookie 名称和值 冒号用于分隔标头中的多个 cookie 还有其他 特殊
  • Chrome 不缓存图像/js/css

    当 Chrome 加载我的网站时 它会在显示文件之前检查服务器是否有文件的更新版本 图像 Javascript CSS 它从服务器获取 304 因为我从不编辑外部 javascript css 或图像 我想要它做的是显示图像 甚至无需检查服
  • 在 C 和 C++ 中使用浮点转换与浮点后缀有什么区别吗?

    这之间有区别吗 使用浮点文字后缀 float MY FLOAT 3 14159265358979323846264338328f f suffix double MY DOUBLE 3 141592653589793238462643383
  • Bash:无法在管道右侧构建数组

    有人知道为什么这段代码不能按预期工作吗 gt svnTags gt svn ls http plugins svn wordpress org duplicate post tags while read line do slashless
  • 实体框架 4 实体状态未更改触发更新

    我正在使用 EF 4 使用存储过程映射我的实体的所有 CUD 操作 我有两个表 地址和人员 一个人可以有多个与其关联的地址 这是我正在运行的代码 Person person from p in context People where p
  • JavaScriptSerializer - 枚举作为字符串的 JSON 序列化

    我有一堂课 其中包含enum属性 并在使用序列化对象时JavaScriptSerializer 我的 json 结果包含枚举的整数值而不是它的string 姓名 有没有办法让枚举作为string在我的 json 中 无需创建自定义JavaS
  • 当您等待失败的任务时会发生什么

    我有一个理论问题要问你 如果我在另一个任务中等待一个任务的结果 会发生什么 我想知道我现在的系统以后是否还能工作 任务启动并执行一些操作 在某些时候 该任务可能需要另一个任务来处理当前任务本身无法处理的数据 所以我使用await来确保只要他
  • Codeigniter php7 错误

    我在 Codeigniter 2 上有一个网站 当我将服务器版本切换到 PHP7 时 出现以下两个错误 遇到 PHP 错误严重性 通知 消息 仅应通过引用分配变量 文件名 core Controller php 线路编号 51 this g
  • 在 Android 中拨打 911

    我想使用 Android SDK 拨打紧急号码 我正在使用以下代码拨打号码 911 此代码适用于除 911 紧急号码 之外的所有号码 当我使用 911 时 它会显示我不想要的拨号屏幕 是否有任何程序可以在不打开拨号器的情况下拨打 911 或
  • 以编程方式将 Power BI 报表部署到 Power BI 报表服务器并更改连接字符串

    是否有任何方法可以将 Power BI 报表部署到 Power BI 报表服务器 而无需手动复制这些文件 将它们上传到服务器 最后逐个报表地更改每个报表的数据源连接信息 这在每个报表中都不实用客户站点 例如 PowerBI 报告文件 Rep
  • bmake 的优点

    除了 bmake 是 GNU make 的 BSD 等价物这一事实之外 我无法清楚地理解它相对于 GNU make 的优势 谁能帮我 我只能找到一个resource这有点帮助 感谢更多帮助或指示 BSD make 和 GNU make 都是
  • 如何获取一周以上的推文(使用 tweepy 或其他 python 库)

    我一直在试图解决这个问题 但这确实令人沮丧 我正在尝试使用 Tweepy 获取带有特定主题标签的推文 大量推文 但这不会追溯到超过一周 我需要回到至少两年前 持续几个月 这可能吗 如果可能的话 怎么办 只是为了检查这里是我的代码 impor
  • mysql 游标中的记录数而不迭代?

    我正在尝试为以下逻辑编写 mysql 程序 select id fullname from users where fullname like concat lastname firstname middlename 如果上面的查询返回 0
  • Pandas json_normalize 产生令人困惑的“KeyError”消息?

    我正在尝试将嵌套 JSON 转换为 Pandas 数据帧 我一直在使用json normalize一直成功 直到我遇到了某个 JSON 我制作了一个较小的版本来重现问题 from pandas io json import json nor
  • 为什么某些 IDE 不缩进 switch 内的 case 语句? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么人们不缩进 C 访问说明符 case 语句 我有一个语法问题 不是关于how 而是why 许多 IDE 例如 Eclipse 和 Qt Creator 会自动缩进switch像这样 Day ra
  • 在 MongoDB 中查找共享键值的两个文档

    我在 MongoDB 中有大量文档 每个文档都有一个名为 name 的键 另一个名为 type 的键 我想找到两个文件一样的名字 and 不同种类 一个简单的 MongoDB 对应项 SELECT FROM table AS t1 tabl
  • COALESCE 或 CASE 更高效和/或标准

    就 x 与 y 而言 x 是否更符合 sql 标准 如果主观的话抱歉 x 比 y 更有效率吗 或者这些脚本完全不同并且在不同的上下文中使用 x SELECT FROM a INNER JOIN b ON COALESCE b columnt
  • 声明/定义自定义类 cout 对象的正确方法

    我创建了自己的std cout类似于将两者写入的对象std cout并写入日志文件 我目前在头文件中像这样定义它 但我收到了未使用的变量警告 头文件