一种使用不同风格的私有成员的方法
A method using different flavors of it's own private members
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方法;但是CCD_ 4通过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();
}
采用更具描述性的格式的方法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());
}
这样做更好,因为您只创建了一个方法,并且不会不必要地公开类的成员。
您已经得到了所有技术上正确的答案,但这里真正的问题是接口设计,所以我想解决这个问题。
首先,将对象自己的私有数据作为参数传递它自己的方法是。。。好吧,至少可以说很奇怪。似乎您正试图通过向用户公开内部实现的详细信息来解决一个低级问题,并使用户依赖于任何内部更改。
我的第一个问题是"useVectorOfX
方法真的设计用于任何vector<X>
吗?
-
是:您可能应该有两种方法,
doSomething(const vector<X>& clientsData)
和doSomething() // using your private data
-
no:第二个问题:"从用户的角度来看,这(语义上,而不是代码上(是同一个操作吗?"?
-
是:使用一种带有修饰符的方法,如@nightcracker,例如
doSomething(A::highPrecision)
- 否:按@neneneba博使用2种方法。这将允许您在未来以用户透明的方式更改内部实现
-
是:使用一种带有修饰符的方法,如@nightcracker,例如
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- Qt VTK交互风格的信号到小部件
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 是否有一种替换C风格的Bool数组的标准方法
- C++函数和方法风格
- C++方法良好的编程风格
- 方法原型风格澄清
- 有没有一种方法可以从镶嵌图中提取文档的风格信息
- 为什么std::string方法的风格与STL的其他部分不同?
- 使用更小的函数来分解长方法-正确的风格/如何声明
- 目标C错误:C风格的方法内部类实现
- 一种使用不同风格的私有成员的方法