У меня есть вектор и несколько классов (расположенных в отдельных файлах) для изменения одного.
Я хочу иметь глобальный доступ к 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: Извините за не очень ясное объяснение, потому что я плохо знаю английский