【发布时间】:2015-03-26 21:16:58
【问题描述】:
我正在对 MyVal 类进行自动编码/解码 像
template<typename T>
class MyVal
{
public:
MyVal() {}
MyVal(T v)
{
encode(v);
}
operator T ()
{
return decode();
}
operator const T () const
{
return decode();
}
MyVal<T>& operator=(T& v)
{
encode(v);
return *this;
}
}
我有
MyVal<int> some;
它在大多数情况下都可以正常工作,但如果我运行 printf("%d", some),它不会调用任何 T(),因此它不会给我解码后的值。
有什么方法可以在不更改 MyVal 类的任何代码的情况下使 printf 工作?
【问题讨论】:
-
这不是你在 C++ 中做 IO 的方式。查找 C++ 流运算符。 cprogramming.com/tutorial/c++-iostreams.html
-
不,这是不可能的。采用
...的函数不会对除默认参数提升之外的参数执行任何转换。在现代 C++ 中,避免在参数列表中使用带有...的函数(带有模板参数包的函数除外!) -
使用 Boost 格式获得类似 printf 的体验,并具有良好的 C++ 支持。
标签: c++ templates printf encode