【发布时间】:2016-11-05 15:52:53
【问题描述】:
我有一个 std::vector 的 std::reference_wrapper 对象,我想用 printf 打印(不带 cout);现在,如果我写
int a=5;
std::reference_wrapper<int> b=a;
printf("%i\n\n",b);
我得到一个无意义的号码(我认为是a的地址);为了获得我的价值,我必须这样做
printf("%i\n\n",b.get());
有没有办法在printf 中自动调用.get() 函数(例如,一个不同的% 说明符打印我reference_wrapper content),这样我就可以创建一个通用的函数,它既适用于std::reference_wrapper<type>和type?
【问题讨论】:
-
第一步是使用 iostream 库而不是 stdio 库。
-
你的第一个代码 sn-p 不会到处编译。
error: cannot pass objects of non-trivially-copyable type 'class std::reference_wrapper<int>' through '...' -
@Hurkyl 我已经在使用 iostream
-
@ChristianHackl 我编译它没有问题...尝试禁用警告
-
作为记录,MSVC 也会生成诊断消息:
warning C4477: 'printf' : format string '%i' requires an argument of type 'int', but variadic argument 1 has type 'std::reference_wrapper<int>'
标签: c++ reference printf stdvector reference-wrapper