// Функция, по которой нужно выйти из цикла
void stop()
{
run = false;
}
// Функция с тем самым циклом
void cycle()
{
while(run)
{
// ...
// На следующую проверку run не попадем, пока пользователь
// что-то не нажмет, мне же нужно как раз как-то прервать
// это ожидание
std::cin.getline(buffer, strlen(buffer));
}
}
// Функция, по которой нужно выйти из цикла
void stop()
{
run = false;
}
// Функция с тем самым циклом
void cycle()
{
while(run)
{
// ...
// На следующую проверку run не попадем, пока пользователь
// что-то не нажмет, мне же нужно как раз как-то прервать
// это ожидание
std::cin.getline(buffer, strlen(buffer));
}
}
class Base
{
public:
virtual void printName() const = 0;
virtual ~Base();
}
class DerOne: public Base
{
public:
void printName() const
{ std::cout << "DerOne" << std::endl; }
void oneFunction();
}
class DerTwo: public Base
{
public:
void printName() const
{ std::cout << "DerTwo" << std::endl; }
void twoFunction();
}
class User
{
private:
Base* base;
public:
User(bool derOne)
{
if (derOne) base = new DerOne;
else base = new DerTwo;
}
void print()
{ base->printName(); }
void specific()
{ // Здесь, допустим надо вызвать функции oneFunction, в случае,
// если была инициализация DerOne, и twoFunction, в случае с DerTwo...
// Есть ли какой-то способ кроме как писать везде условия с последующим
// reinterpret_case<DerOne*>(base)->oneFunction() ? }