如何以sam方式从对象包装的浮点数中获取浮点值?

时间:2014-05-29 16:05:14

标签: c++ class templates

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

2 个答案:

答案 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();不应该