如何正确地使模板运算符T()使用像printf这样的函数?

时间:2015-01-28 03:54:32

标签: c++ templates printf encode

我在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(),因此它不会给我解码的值。

有没有办法让printf在不改变MyVal类的任何代码的情况下工作?

1 个答案:

答案 0 :(得分:0)

printf假定您(程序员)负责传递正确的参数类型。由于您承担了这一责任,因此您无法依赖自动转换

您必须手动将变量强制转换为正确的类型。

printf("%d", int(some));