如何正确地使模板运算符 T() 与 printf 等函数一起工作?

how to correctly make template operator T() work with funcs like printf?

我正在 MyVal class 上开发自动 encoding/decoding 像

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 工作 class?

printf 假定您作为程序员负责传递正确的参数类型。由于您承担了该责任,因此您不能依赖自动转换

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

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