class A{
private:
std::vector<class X> flavor1
std::vector<class X> flavor2
public:
void useVectorOfX(std::vector<class X> someflavor){
... // same logic for both flavors
}
}
现在我想从另一个班级拨打useVectorOfX()
,根据需要为其提供flavor1
或flavor2
。我可以想到三种方式 -
方式1:使用Getter方法;但class A
通过Getter方法获取自己的数据似乎不自然。
class B{
public:
A *a = new A();
a->useVectorOfX(a->getFlavor1());
}
方式2:制作两个向量public
(脏)
方式3:分开方法?
class B{
public:
A *a = new A();
a->useVectorOfXForFlavor1();
a->useVectorOfXForFlavor2();
}
答案 0 :(得分:4)
以更具描述性的格式表达方式1:
class A {
public:
enum {
flavor1 = 0, // used as array index, first element must be zero
flavor2,
} vector_flavor;
static const int number_of_flavors = 2;
void useVectorOfX(vector_flavor flav){
std::vector<class X> someflavor& = vectors[flav];
// ...
}
private:
std::vector<class X> vectors[number_of_flavors];
}
A object; // lol
object.useVectorOfX(A::flavor1);
答案 1 :(得分:3)
我会选择选项3.使用
void useVectorOfXForFlavor1(){
useVectorOfX(flavor1);
}
似乎非常合理。
答案 2 :(得分:1)
如下:
std::vector<class X> flavors[2];
...
public:
void useVectorOf(int X) { useVectorOf(flavors[X]); }
private:
void useVectorOf(std::vector<class X> &v) { ...; }
使用enum
而非普通int
会更好。
答案 3 :(得分:1)
使用
class B{
public:
A *a = new A();
a->useVectorOfX(a->getFlavor1());
}
这样做更好,因为你只创建了一个方法而且你不必不必要地破坏类公共成员。
答案 4 :(得分:1)
你已经得到了所有技术上正确的答案,但这里真正的问题是界面设计,所以我想解决这个问题。
首先,将对象自己的私有数据作为参数传递,它自己的方法是......好吧,奇怪,至少可以说。似乎您试图通过向用户公开内部实现细节来解决低级问题,并使他依赖于任何内部更改。
我的第一个问题是“useVectorOfX
方法 真的 是否适用于任何 vector<X>
?
是:您可能应该有2种方法,doSomething(const vector<X>& clientsData)
和doSomething() // using your private data
没有:第二个问题:“这是( 语义 ,从用户的角度来看,不是代码方式)相同的操作“?
doSomething(A::highPrecision)