是否可以在对象上定义自定义转换以成为方法调用的结果?

Is it possible to define a custom cast on an object to become the result of a method call?

是否可以在对象上定义自定义强制转换,以便对象强制转换为方法调用的结果?

class Foo {
  public:
    ...
    int method() { return 3; }
};

Foo foo;
int bar = foo + 7; // 10

您可以提供一个转换函数,如下所示:

方法一

直接return一个int而不使用method在转换函数中。

class Foo {
  public:
    //conversion function
    operator int()
    {
        return 3;
    }
};

Foo foo;
int bar = foo + 7; // bar is initialized with 10

int main()
{
    std::cout<<bar;//prints 10
    return 0;
}

Demo

方法二

在转换函数中使用 method 到 return 一个 int

class Foo {
  public:
    
    int method() { return 3; }
    
    operator int()
    {
        return method();
    }
};

Foo foo;
int bar = foo + 7; // 10

int main()
{
    std::cout<<bar;//prints 10
    return 0;
}

啊。我想多了。

#include <iostream>
#include <string>

class Foo {
    public:
    Foo() { _data = 3; }
    int method() { return _data; }
    operator int() {
        return method();
    }
    int _data;
};

int main()
{
  Foo foo;
  int bar = foo + 7;
  std::cout << bar << std::endl;
}