c++ - 处理未知数量的 undefined object 以进行记录

标签 c++

尝试重现在 C# 中你会做这样的事情:

 string FormatString(params object[] args) {
      return string.Format(CultureInfo.InvariantCulture, args);
 }

在 Obj-c 中它看起来像这样:

#include <stdarg.h>

void logObjects(id firstObject, ...) {
    va_list args;
    va_start(args, firstObject);
    id obj;
    for (obj = firstObject; obj != nil; obj = va_arg(args, id))
        NSLog(@"%@", obj);
    va_end(args);
}

logObjects(@"foo", [NSNumber numberWithInt:4], @"bar", nil);

我熟悉可变参数长度但不太确定如何存储 args 然后将它们发送到 std::cout。这可能吗?

注意!我想发送任何可以处理 << 运算符的对象。只需将此功能视为以下功能的替代品:

std::cout << "test" << someObject << int << someOtherObject; 

我正在使用 boost 并希望它保持平台独立性。此函数将成为共享库中日志记录类的一部分。

最佳答案

它在 C# 中也不起作用,因为无论如何概念都清楚,格式字符串丢失了。在 C 中,您可以执行类似的操作(如 dbgprint 中所示,如果您具有可变宏功能)

#define printfex(...) printf(__VA_ARGS__)

如果你有幸使用C++11你可以写这个原型(prototype):

template<class... T>
void printfex(const std::string& format, T... args);

关于c++ - 处理未知数量的 undefined object 以进行记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711562/

相关文章:

python - 为什么 Python 递归如此昂贵,我们能做些什么?

c++ - 在 C++ 中,每个 "statement"也是一个表达式吗?

c++ - Allgro 5 'multiple definition of … first defines here …'中的定义错误

c++ - C++ API 中的渐进式披露

c++ - 如何在没有MFC的情况下从C++/VC 6.0中的excel文件中读取数据?

c++ - 嵌套渲染循环是不好的做法吗?

c++ - ‘std::cout << 中 ‘operator<<’ 的模糊重载

c++ - 属性透明时如何改变静态控件的字体大小和字体

c++ - 将 shared_ptr 转换为不同命名空间中相同类型的 shared_ptr

c++ - 尝试将参数传递给方法时出现“call to implicitly-deleted copy constructor of”错误