2011-03-08 55 views
0

我想做一个浮动包装(这也将在构造函数中做一些神奇的东西)。不正确的值从运算符铸造参考

但是我发现自己有很奇怪的错误。

class Foo { 
public: 
    Wrapper(); 

    operator const float&() const { return m_bar; } 
    operator float&() { return m_bar; } 

    const float& Get() const { return m_bar; } 
    float& Get(){ return m_bar; } 
private: 
    float m_bar; 
}; 

如果我使用Get(),然后我得到正确的值,但如果我只是使用转换运算符,然后我得到的随机值。

难道不可能投给会员吗?

+1

这显然是,但你如何使用它?任何临时参与? – 2011-03-08 23:43:37

+0

float bar =(float)foo;为我工作罚款使用你的课(我只是让公共m_bar能够设置它) – SinistraD 2011-03-08 23:47:20

+0

Foo酒吧= 5; Add2dText(SomePos,白色,“Bar:%f”,bar); – 2011-03-08 23:48:47

回答

2

正如你在你的评论中所说的,你正在将类传递给可变参数函数(我猜这是可变形的可变参数)。可变参数传递不起作用,因为它传递类的地址而不是转换类型(它不知道它应该在传递时将它转换成什么)。

如果您需要使用可变参数,则使用Get或显式强制转换是唯一的解决方案。

+0

Okey,但我是否也需要对普通的浮动操作符使用显式投射? – 2011-03-09 00:06:52

+3

不,您需要避免可变参数函数,因为它们不适用于类对象。 – 2011-03-09 00:14:27