相互返回类型的成员函数(C ++)

时间:2011-05-21 05:35:26

标签: c++ return-value member-functions incomplete-type

在C ++中是否有可能有两个类,让我们称它们为AB,这样A有一个返回类对象的成员函数f BB有一个成员函数g,它返回类A的对象?

(以下文字只是为了表明我“完成了我的作业”。)

问题是当第一个定义的类中的一个具有不完整的返回类型时,如何编写这些函数的签名。前向声明在这里没有帮助,因为对象是按值返回的。

是的,我知道所有的变通方法(朋友全局函数,通过指针返回......),但我想知道上面的接口是否可以用C ++实现。为了举个例子,假设我试图在类A上重载operator()以返回B,并在类B上重新返回A。由于我正在重载运算符,我必须按值返回(好吧,除非我想要动态分配地狱:),并且()必须作为成员函数重载,所以我不能使用全局朋友。

2 个答案:

答案 0 :(得分:7)

是,在您声明class A

后实施class B的功能定义
class B;

class A
{
    B f();
};

class B
{
    A g() { A a; return a; }
};

B A::f(){ B b; return b; }

答案 1 :(得分:0)

打破依赖循环的另一种可能方法是使用模板成员函数,如下所示:

struct A {
    template<typename T>  T f() { return T(); }
};

struct B {
    A g() { return A(); }
};

int main() {
    A a;
    B b = a.f<B>();
    A a1 = b.g();
    return 0;
}

它也适用于operator(),虽然调用语法会相当丑陋:a.operator()<B>()