PI'm试图将float,int等原始值包装到我的SParam类中。但是我从这个结构中获取值时遇到了一些问题。我想使用这个结构,因为我使用例如浮点数。
template<class T>
struct SParam
{
T value;
SParam()
{
}
operator T() const
{
return value;
}
};
SParam<float> a;
a.value = 4;
printf("%f", a); //<--this don't print a.value
答案 0 :(得分:0)
使用&#34;裸体&#34;的问题具有SParam<float> a
的{{1}}(或任何其他需要可变数量参数的函数)是编译器不知道您想要传递printf
。这就是为什么不应用特定类型转换的原因。如果您调用具有特定参数类型的函数,请说
float
然后编译器会从void printFloat(float f) {
printf("%f", f);
}
...
SParam<float> a;
a.value = 4;
printFloat(a);
的签名中发现需要应用转换为printFloat
,并且一切都会按预期工作。当然,您始终可以手动应用转换:
float
答案 1 :(得分:0)
因为您需要在printf中调用a()
,而不是a
a
只是SParam
类型的对象,您可能需要修改运算符定义以指定T的返回类型。
进行比较尝试使用float x = a;
它会给你一个错误。 float x = a();
不应该