Код: Выделить всё
template
class Processor1 {
private:
std::vector data;
std::vector intermediate1;
std::vector result;
public:
Processor1(std::vector input) : data(input) { /*...*/ }
// Big function with multiple dependent stages
std::vector processData() {
for (size_t i = 0; i < data.size(); ++i) {
intermediate1[i] = data[i] / 100;
}
for (size_t i = 0; i < intermediate1.size(); ++i) {
result[i] = intermediate1[i] * intermediate1[i];
}
// ... more stages
return result;
}
};
// Similar structure for Processor2 and Processor3
class Processor2 { /*...*/ };
class Processor3 { /*...*/ };
Код: Выделить всё
std::vector> processors;
for (auto& p : processors) {
std::visit([](auto& processor) {
processor.processData();
}, p);
}
Я хочу писать модульные тесты для каждого этапа ProcessData() независимо, а не тестировать весь конвейер как одну монолитную функцию. Тем не менее,processData() является общим интерфейсом, необходимым для полиморфного поведения.
Вопросы:
Могу ли я провести рефакторинг ProcessData(), извлекая каждый этап в отдельные функции-члены, не нарушая полиморфный интерфейс?
Влияет ли извлечение этапов на отдельные функции на полиморфное использование с std::variant и std::visit?
Подробнее здесь: https://stackoverflow.com/questions/798 ... sed-with-s
Мобильная версия