【问题标题】:Set return value for class?设置类的返回值?
【发布时间】:2014-11-20 01:33:22
【问题描述】:

所以我一直在四处寻找帮助,但一无所获。 有没有办法将类作为变量传递并让它引用该类的成员?

例如而不是

myclass foo; 
foo.Bar = 0.0f;
Func(foo.Bar);  //Func takes in a float.

如果我想让Func 知道Bar 而无需我直接在函数内部或外部使用访问运算符。几乎就像一个自动设置器。

我希望能够做到这一点..

myclass foo; 
foo.Bar = 0;
Func(foo);  //Func takes in a float.

有没有办法让Func 像这样从foo 拉出Bar

提前谢谢你。

【问题讨论】:

  • 要么提供Func 的重载,它采用const myclass&,要么提供conversion function,用于将myclass 实例转换为其float 成员。选择权在你。

标签: c++ class parameter-passing return-value getter-setter


【解决方案1】:

你可以给你的类添加一个隐式转换函数:

struct myclass
{
    float Bar;

    operator float() const { return Bar; }
    // ^^^^^^^^^^^^^^^^^^^
};

然后,只要需要float,您就可以使用myclass 类型的对象:

myclass x;
extern void f(float);
f(x);  // OK

隐式转换通常是个坏主意,而且这种设计似乎不是很有用,并且可能会以您最终会后悔的方式污染您的代码库,但如果没有上下文,这将按您的要求做。

【讨论】:

    【解决方案2】:
    void Func(myclass &mc)
    {
        float x = mc.foo;
       // do floaty stuff with x
    
    }
    

    那你就可以了

    myclass foo; 
    foo.Bar = 0;
    Func(foo);
    

    虽然这可能不是你要找的:(

    【讨论】:

      【解决方案3】:

      你需要为你的类定义强制转换运算符;

      如果 flat_mbr 是公开的,则在全局范围内:

      operator float(const MyClass& ref)
      {
          return ref.float_mbr;
      }
      

      或者像 Kerrek 回答的那样作为类成员运算符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多