Есть такой себе простой класс для многопоточной работы с глобальными переменными:
/* Global Secured Variable */
template <class T>
class GSV{
T value;
HANDLE mutex;
public:
GSV(){mutex = CreateMutexA(0, false, 0);}
~GSV(){CloseHandle(mutex);}
T get(){
WaitForSingleObject(mutex, 0xFFFFFFFF);
T val = value;
ReleaseMutex(mutex);
return val;
}
void set(T val){
WaitForSingleObject(mutex, 0xFFFFFFFF);
value = val;
ReleaseMutex(mutex);
}
};
То есть класс управляет всего одним значением, которое нужно задавать и читать. Можно ли сделать так, чтобы обращение к переменной класса, например GSV<string> Var;, происходило просто по её имени Var - то есть без Var.get()? С сеттером вроде всё понятно - перегрузить оператор =, а вот как геттер сделать "визуально простым" чё-т не пойму (если это вообще возможно).
Используйте оператор приведения к типу.
template <class T>
class GSV{
...
operator T() { return get(); }
Либо перегружайте T& operator*() и T* operator->() как у умных указателей.
Для поддержки присваивания надо будет написать класс прокси, т.е.
struct Proxy {
void operator=(T);
operator T();
};
Proxy operator*();
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости