c++ - 与 std::cout 一样将参数传递给成员函数
问题描述
我想创建一个具有可用作 std::cout 的成员函数的类。为了演示我创建了这个代码示例的问题
#include <iostream>
#include <string>
class myClass
{
public:
void myFunc(? data)
{
std::cout << data << std::endl;
}
};
int main()
{
myClass myObject;
int var = 1;
myObject.myFunc() << "Text" << var;
}
如您所见,我想将参数传递给函数,就好像我会std::cout
直接使用一样。那可能吗?我在网上搜索并阅读了很多,但没有得到它的工作,任何人都可以帮助或链接一个页面以获取更多信息?
解决方案
std::cout
通过使用二元运算符“获取”输入:(operator<<
也称为流运算符或左移运算符)。它可以是一个类的方法,例如:
class A {
public:
template <typename T>
A& operator<<(const T& x) {
// do stuff with x
return *this;
}
}
或独立的二元函数:
class A { ... };
template <typename T>
A& operator<<(A& lhs, const T& rhs) {
// do stuff with A and rhs
return lhs;
}
myClass
在您的情况下,可以将数据“流式传输”到 a :
直截了当,不像你的问题,而是像
std::cout
:class myClass { public: template <typename T> void myFunc(const T& data) { ... } } template <typename T> myClass& operator<<(myClass& lhs, const T& rhs) { lhs.myFunc(rhs); return lhs; }
使用代理对象,它
myFunc()
返回:class myClass { public: struct StreamingProxy { A const & ref; } StreamingProxy myFunc() { return StreamingProxy{*this}; } } template <typename T> myClass::StreamingProxy operator<<(myClass::StreamingProxy lhs, const T& rhs) { lhs.ref.myFunc(data); return lhs; }
这段代码有点“草图”,但它确实有效。
推荐阅读
- inno-setup - 即使在使用 Inno Download Plugin 下载失败后继续安装
- android - 长按不适用于 OnLongClickListener
- angular - 自从 Angular 从 v8 更新到 v12 后,IntelliJ Rider 不再获取 Angular 引用
- chef-infra - 根据安装的 rpm 版本设置厨师间隔和播放时间
- java - 谁能告诉为什么会出现这个错误?笔记本电脑 l = 新笔记本电脑();对静态参考的非统计
- c# - 如果 viewmodel 不包含 id,如何删除数据库 col
- r - 在 R Shiny 中,如何取消选中复选框输入以执行操作?
- c# - WinUI:在 Application 类的 OnLaunched 方法中使用启动逻辑显示 SplashScreen
- javascript - 循环对象数组并根据定义的静态键显示值 javascript
- swift - 依赖注入,差异?