Вот абстрактный пример кода, в котором нужно сделать так чтобы метод print мог принимать любой тип:
#include <iostream>
#include <memory>
struct Base {
virtual void print(const int&) = 0;
};
struct No_work : Base {
void print(const int&) override {
// метод который ничего не делает
}
};
struct Work : Base {
int end;
Work(const int& end) : end(end) {}
void print(const int& info) override {
// метод который что-то делает
for (int i = 0; i < end; ++i) {
std::cout << info << std::endl;
}
}
};
int main() {
std::unique_ptr<Base> printer = std::make_unique<Work>(5);
printer->print(5);
printer = std::make_unique<No_work>();
printer->print(6);
printer = std::make_unique<Work>(2);
printer->print(7);
return 0;
}
Хочется добиться подобного поведения в коде, так чтобы в зависимости от условия код мог выполняться, а мог пропускаться и к тому же не выделять лишнюю не используемую память.