Я пытаюсь реализовать свойства 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;
работает без ошибок, но фактически не меняет фактическое A из B , потому что доступ ((A) b.pB1) .pA1 дает неизменное значение, поскольку, вероятно делает копию.
Есть ли способ сделать это без указателей?