我举了以下例子来说明我的问题:
class A
{
public:
int common;
int a,b,c;
A(int _common, int _a, int _b, int _c):common(_common),a(_a),b(_b),c(_c)
{
}
};
A obj1, obj2, obj3, obj4;
class B
{
public:
void push_back(int common, int a, int b, int c)
{
A obj(common,a,b,c);
aObjArray.push_back(obj);
}
std::vector<A> aObjArray_;
};
B myObj;
int common=3;
myObj.push_back(common,1,2,4);
myObj.push_back(common,4,26,54);
myObj.push_back(common,7,52,64);
在此示例中,类B
包含一个Class A
对象的数组。创建对象由四个元素决定。期望A类中的common
元素,每个生成的A对象的其他元素将不同。我能想到的一个解决方案是使common
元素成为静态类成员,这样几个A类对象将共享相同的元素。
class A
{
public:
static int common;
A (int _a, int _b, int _c)
{...}
}
class B
{
public
int common;
B()
{
A::common = common;
}
}
还有其他想法吗?
答案 0 :(得分:1)
有很多方法可以实现这一目标,因此一个具体的例子可能会为您提供更好的答案。
简化程序的一种简单方法是在类B
中引入一个变量,该变量在构造common
时定义A
的值。具体来说,此值将在B::push_back
中读取,并且调用者只需提供a,b,c
。
如果在编译中知道common的值,您可以考虑将类A
设为template
:
template<int common>
class A {
public:
void foo() {
...`common` available here...
}
};
对于复杂或变异对象,您可以考虑使用共享指针。通常,可以(并且应该)避免这种复杂性。
答案 1 :(得分:1)
也许共享指针可以帮到你?
#include <vector>
#include <memory>
#include <iostream>
struct A {
std::shared_ptr<int> common;
int a, b, c;
void use_common() {
std::cout << *common << std::endl;
}
};
int main() {
std::vector<A> va;
auto common = std::make_shared<int>(1);
va.push_back({common, 1, 2, 3});
va.push_back({common, 4, 5, 6});
va.push_back({common, 7, 8, 9});
va[0].use_common();
}