我在一个项目中有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&)是不允许的。
答案 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));
}
这接近您的代码。可能需要进行一些调整。