Тема: Глобальні змінні (або статичні у класі)
Не раз стикався з такою проблемою: потрібно між об'єктами різних класів передати данні.
Наприклад: Є класи А, В, С вони по різному опрацьовують setValue, мають вставляти дані в один і той самий стек.
Як бути в такому випадку ?
#include <iostream>
#include <stack>
std::stack<int> values;
class A
{
public:
    virtual const int &getValue() const
    {
        int &a = values.top();
        values.pop();
        return a;
    }
    virtual void setValue(const int &value)
    {
        values.push(value + 1);
    }
};
class B : public A
{
public:
    void setValue(const int &value) override
    {
        values.push(value + 2);
    }
};
class C : public A
{
public:
    void setValue(const int &value) override
    {
        values.push(value + 3);
    }
};
int main()
{
    A obj1;
    obj1.setValue(5);
    B obj2;
    obj2.setValue(5);
    C obj3;
    obj3.setValue(5);
    
    std::cout<<obj1.getValue()<<'\n';
    std::cout<<obj1.getValue()<<'\n';
    std::cout<<obj1.getValue()<<'\n';
    return 0;
}Чому в класах С++ не можна створити статичну змінну ?
static std::stack<int> values;Пробував якось обійти це... (хоча це ще гірший варіант...)
#include <iostream>
template<typename T>
class A
{
public:
    static T &getStaticVar(const T &setStaticVar = 0)
    {
        static T staticVar = 0;
        if(setStaticVar != 0)
            staticVar = setStaticVar;
        return staticVar;
    }
};
int main()
{
    A<int> obj;
    obj.getStaticVar(5);/*Встановлюю 5 у об'єкт obj*/
    
    std::cout<<A<int>::getStaticVar();/*беру значення без жодного об'єкту*/
    
    return 0;
}Що ж все таки робити, створювати глобальну змінну в просторі імен, використовувати патерни (як singleton наприклад), чи є, інша, краща ідея ?