C ++类型重载问题

时间:2016-01-26 03:05:03

标签: c++

我在一个项目中有3个类,A,B和C.B来自A.而B可以用C构造(它有一个构造函数B :: B(C& c)。如果一个方法需要类型B,我可以改用C实例。

虽然C可以转换为B,但是我不能直接将C作为参数传递给需要A的函数。

void func(A a) {}
C c;
// calling func
func(c); // compile error
func(B(c)); // casting to B first; works.

是否可以编译func(c)?由于一些其他因素,我无法添加构造函数直接从C构造A:A :: A(C&)是不允许的。

1 个答案:

答案 0 :(得分:4)

这在VS2012中编译:

class A { };
class B : public A { };
class C
{
public:
    operator B() { return B(); }   // User defined conversion.
                                   // This is pseudo code just to satisfy the syntax.
};

void func(A a) { }

int _tmain(int argc, _TCHAR* argv[])
{

    C c;
    func(c);
    func(B(c));
}

这接近您的代码。可能需要进行一些调整。