Геттер и сеттер просто по имени переменной класса

245
13 июля 2017, 01:31

Есть такой себе простой класс для многопоточной работы с глобальными переменными:

/* 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()? С сеттером вроде всё понятно - перегрузить оператор =, а вот как геттер сделать "визуально простым" чё-т не пойму (если это вообще возможно).

Answer 1

Используйте оператор приведения к типу.

template <class T>
class GSV{
...
  operator T() { return get(); }

Либо перегружайте T& operator*() и T* operator->() как у умных указателей.
Для поддержки присваивания надо будет написать класс прокси, т.е.

struct Proxy {
   void operator=(T);
   operator T();
};
Proxy operator*();
READ ALSO
С чего начать создание игр на C++? [требует правки]

С чего начать создание игр на C++? [требует правки]

С чего начать создание 2D игр на C++? В какой среде это лучше сделать? Ps

191
Проблема с типом данных при вычислении площади треугольника

Проблема с типом данных при вычислении площади треугольника

Здравствуйте, решаю задачку для олимпиады

243
вопрос по QThreadPool

вопрос по QThreadPool

Использую QThreadPool, делаю setMaxThreadCount(10), ошибок нету, все работает, только потоков в тредпуле все равно 4(количество ядер на машине), понять совершенно...

248
Какие плюсы и минусы использования goto?

Какие плюсы и минусы использования goto?

Предположим, у меня есть следующая конструкция:

271