Я пытаюсь реализовать C свойства ++ в качестве шаблонов, как определено в WikiPediaСвойства Свойства как шаблоны
template <typename T> class property {
T value;
public:
T & operator = (const T &i) {
::std::cout << i << ::std::endl;
return value = i;
}
// This template class member function template serves the purpose to make
// typing more strict. Assignment to this is only possible with exact identical
// types.
template <typename T2> T2 & operator = (const T2 &i) {
::std::cout << "T2: " << i << ::std::endl;
T2 &guard = value;
throw guard; // Never reached.
}
operator T const &() const {
return value;
}
};
Теперь предположим, что я объявляю 2 класса, один из которых содержит другое как свойство:
class A
{
public:
Property<double> pA1;
Property<double> pA2;
};
class B
{
public:
Property<A> pB1;
Property<double> pB2;
};
Теперь, есть ли способ объявить B и обладает свойствами доступа A?
B b;
b.pB1.pA1=1;
не работает;
((A) b.pB1).pA1=1;
работает без ошибок, но на самом деле не изменить фактическую из B, потому что экранный ((A) b.pB1) .pA1 дает неизменное значение, так как он, вероятно, делает копию.
Есть ли способ сделать это без указателей?
Что не работает в виду? givs ошибка? – Shaihi