Есть такой себе простой класс для многопоточной работы с глобальными переменными:
/* 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*();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
С чего начать создание 2D игр на C++? В какой среде это лучше сделать? Ps
Здравствуйте, решаю задачку для олимпиады
Использую QThreadPool, делаю setMaxThreadCount(10), ошибок нету, все работает, только потоков в тредпуле все равно 4(количество ядер на машине), понять совершенно...