是否有任何使用friend
重载一个已经声明的结构的构造函数与一个使用新定义的结构。例如,在下面的简单示例中,我想用struct B
,而不是修改A.h来重载struct A
构造函数。c + +重载构造函数与新类型/类和朋友
的main.cpp
#include "A.h"
#include "B.h"
int main() {
B x(2);
A y(B);
};
啊
struct A {
float a;
A(float);
};
A::A(float f) { a=f; };
了Bh
struct B {
float b;
B(float);
B(A);
};
B::B(float f) { b=f; };
B::B(A s) { b=s.a; };
A::A(B s){ a=s.b; };
// ^^^----obviously error since A(B) is not declared,
// but how can I make this work without changing A.h?
我知道我可以在阿内与struct B;
和A(B);
适当的位置解决问题。我也想出了一种使用模板的方法,但它不是一个优雅的解决方案。它需要修改A.h。由于我不想进入这里的原因,我不想采用这些技术。我想重载A :: A()构造函数而不修改A.h更重要的是,不假设#include "A.h"
的位置是可控的。我认为这是朋友的职责,但我不知道是否/如何使它与构造函数一起工作。
您是否在寻找[转换运算符](http://en.cppreference.com/w/cpp/language/cast_operator)? –