如何正确地使模板运算符 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));
我正在 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));