c ++ 11 — модель C ++ главный / подчиненный регистр

Я с нетерпением жду, чтобы реализовать шаблон модели ведущий / ведомый регистр для любого типа в C ++. Я начал с:

template <typename T>
struct Reg {

Reg() {}

Reg& operator = (const T& d) {
this->d = d;
return *this;
}

Reg& operator = (const Reg& r) {
d = r.q;
return *this;
}

operator T& () {
return q;
}

void update() {
q = d;
}

T d; /** input */
T q; /** output */

};

Идея

При назначении экземпляру Reg идея состоит в том, чтобы написать d, но при чтении из экземпляра Reg идея заключается в чтении из qдля любого типа T, либо внутреннего, либо пользовательского класса.

Эта проблема

При использовании например T знак равно int работает нормально, но при использовании T определенного пользователем типа, например std: complex, происходит сбой.

пример

Reg<int> a;
a = a + a; // work fine

Reg<complex<int> > b;
b = b + b; // no match for ‘operator+’ in ‘b + b’

Я ожидал, что компилятор выберет Reg::operator T& до complex<int>::operator + как это происходит с T знак равно int, Первым решением было написать все операторы C ++ внутри Reg, чтобы переслать их d, Есть ли лучшее решение?

Вторая проблема после предыдущего решения (переадресация операторов)

Reg<complex<int> > rc1;
complex<int> c2;
rc1 + c2; // work fine
c2 + rc1; // no match for ‘operator+’ in complex<int>

Глобальный вопрос

Существует ли общее решение для пересылки всех операторов (в режиме чтения), примененных к экземпляру Reg, в d объект, и автоматически привести экземпляр Reg к d тип при выполнении операции с d типа объектов?

Решения, использующие C ++ 11, также принимают во внимание 🙂

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]