Есть команда состоящая из нескольких частей: действие -> объекты над которыми действие совершается.
Проблема заключается в том что я не могу придумать наиболее подходящий способ определения какое действие необходимо выполнить и последующего выполнения. Можно конечно сделать всё с помощью switch но хотелось бы по элегантнее.
Думал можно создать ассоциативный массив с ключом в виде string, а значением был бы указатель на функцию но ведь тогда этот указатель сможет указывать только на функции с одинаковыми параметрами и возвращаемыми значениями. Больше идей нет.
Использовать основные преимущества С++. Насколько я правильно понел ваши пожелания, приведу пример, который может вам помочь:
#include <iostream>
#include <vector>
#include <algorithm>
using std::string;
using std::vector;
int sum(const vector<int>& v)
{
int k{};
k = std::accumulate(v.begin(), v.end(), k);
return k;
}
class Action {
public:
virtual void do_it() = 0;
virtual void show() = 0;
virtual ~Action() = default;
};
class Uppercase : public Action {
string s;
public:
Uppercase(const string& obj) : s(obj) {}
// использование std::transform
void do_it() {
std::transform(s.begin(), s.end(), s.begin(),
[](char c) { return toupper(c);});
}
void show() { std::cout << s << std::endl; }
};
class ComputeSum : public Action {
vector<int> v;
int n;
public:
ComputeSum(const vector<int>& k) : v(k), n(0) {}
void do_it()
{
n = sum(v); // использование функции int sum(const vector<int>&)
}
void show() {
std::cout << "sum of numbers: ";
for (int i : v)
std::cout << i << ' ';
std::cout << " = " << n << std::endl;
}
};
// таким образом для каждой задачи вы можете написать новый производный класс
// вот функция с рудиментарным кодом
void res(vector<Action*> v)
{
for (auto p : v)
{
p->do_it();
p->show();
}
}
int main()
{
vector<Action*> vf;
Uppercase u("uppercase");
ComputeSum c(vector<int>{2, 3, 5, 11});
vf.emplace_back(&u);
vf.emplace_back(&c);
res(vf); // просто нужно вызвать функцию с рудиментарным кодом
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На Form есть DataGridView (в нём показывается одна строка) и WebBrowser
пишу бинарное дерево и наткнулся на очень непонятную мне ошибку, вот пример:
Необходимо отрисовать главное окно в фулскринеПодскажите как это сделать! Нагугли что можно выводить так :