一种使用自己私人成员的不同口味的方法

问题描述

|
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:使两个向量Make6ѭ(脏) 方式3:分开的方法
class B{

public:

  A *a = new A();
  a->useVectorOfXForFlavor1();
  a->useVectorOfXForFlavor2();

}
    

解决方法

        如何以更具描述性的格式显示方式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);
    ,        我会选择选项3。
void useVectorOfXForFlavor1(){
    useVectorOfX(flavor1);
}    
似乎完全合理。     ,        怎么样呢:
std::vector<class X> flavors[2];
...
public:
  void useVectorOf(int X) { useVectorOf(flavors[X]); }
private:
  void useVectorOf(std::vector<class X> &v) { ...; }
使用
enum
而不是普通的
int
会更好。     ,        采用
class B{

public:

  A *a = new A();
  a->useVectorOfX(a->getFlavor1());
}
这样做会更好,因为您只创建一种方法,并且不必不必要地使类的公共成员cra曲。     ,        您已经获得了所有技术上正确的答案,但是这里真正的问题是界面设计,所以我想解决这个问题。 首先,将对象自己的私有数据作为参数传递,它自己的方法……至少可以这样说,这很奇怪。似乎您是在尝试通过向用户公开内部实现的详细信息并使其依赖于任何内部更改来解决底层问题。 我的第一个问题是:“ 14”方法真的设计成可在任何“ 15”上使用吗? 是的:您可能应该有两种方法,16ѭ和
doSomething() // using your private data
否:第二个问题:“这是(从用户的角度来看,而不是从代码角度而言)是相同的操作”吗? 是:根据@nightcracker使用一种带有修饰符的方法,例如
doSomething(A::highPrecision)
否:按照@Bo使用2种方法。这将允许您将来以用户透明的方式更改内部实现     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...