我有一个向量和几个类(位于不同的文件中)来修改这个向量。
我想在派生类中全局访问
您能解释一下如何使用装饰者模式和
我可能错了,也许需要其他模式。
所以,我不想这样做:
英译中:
我有一个简单的装饰者模式实现。
但它并不完全符合我的需求。
PS: 抱歉解释不够清楚,因为我英语不是很好。
我想在派生类中全局访问
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>
的元素求和还是完全其他的事情? - hmjdvector<int>
(添加或删除元素),但使用几个类并返回总结果(修改后的向量)。 - Duglasvector
。请参考 http://ideone.com/6n1Iy 获取一个非常简单的示例。 - hmjd