【发布时间】:2012-02-04 13:27:48
【问题描述】:
我有一个 vector 和几个类(位于单独的文件中)来修改一个。
我想全局访问std::vector,但只能在派生类中
当每个调用存储上一个结果时,最后一个对象应该返回总结果
您能解释一下如何使用带有std::vector 的装饰器模式构建高性能接口吗?
我可能错了,可能需要其他模式。
// A.h
class A () {
public :
vector<int> set(vector<int> &vec);
//return total result
vector<int> get() {
return vector;
}
};
// B.h
class B () {
//add new elements into vector
//for example, add 2,3,4
};
// C.h
class C () {
//remove some elements from vector
//for example, remove last element
};
//...
// main.cpp
#include "A.h"
#include "B.h"
#include "C.h"
int main () {
vector<int> set;
set.push_back(1); //1
C obj(new B(new A()));
obj.set(set);
obj.get(); // stores 1,2,3 (added by classes A, B, C)
}
所以,我不想这样做:
vector<int> set1;
set1.push_back(1);
A *A_init;
A_init->set(set1); //add 1
vector<int> set2 = A_init->get();
B *B_init;
B_init->set(set2); //add 2, stores 1,2
vector<int> set3 = B_init->get();
C *C_init;
C_init->set(set3); //add 3, stores 1,2,3
vector<int> set4 = C_init->get();
/..
我想这样做:
vector<int> set;
set.push_back(1);
C obj(new B(new A()));
obj.set(set);
obj.get(); // stores 1,2,3
我有一个模式装饰器的简单实现。
但这不是我所需要的((
#include <iostream>
#include <memory>
class A {
public:
virtual void operation() = 0;
};
class Component : public A {
public:
virtual void operation() {
std::cout<<"World!"<<std::endl;
}
};
class B : public A {
std::unique_ptr<A> add;
public:
B(A *component): add(component) {}
virtual void operation() {
std::cout << ", ";
add->operation();
}
};
class C : public A {
std::unique_ptr<A> add;
public:
C(A *component): add(component) {}
virtual void operation() {
std::cout << "Hello";
add->operation();
}
};
int main() {
C obj(new B(new Component()));
obj.operation(); // prints "Hello, World!\n"
return 0;
}
PS: 抱歉解释的不是很清楚,因为我不太懂英文
【问题讨论】:
-
你能试着改写问题吗?我不清楚在问什么。最简单的情况是,您是想将
vector<int>的元素相加还是完全相加? -
您的第一个代码块有一些严重的问题,例如未初始化的
init变量。 -
@hmjd,我想在全局范围内(或类似的)修改
vector<int>(添加或删除元素),但使用多个类并返回总结果(修改后的向量)。 -
使用本地
vector<int>并通过引用将其传递给多个类/方法进行修改比在全局范围内拥有一个对象更可取。 -
我有一个类层次结构,其中每个类都返回公共向量的修改版本。而且我不想为每个类做单独的初始化。这是选择
Decorator pattern的主要原因
标签: c++ design-patterns inheritance stl decorator