Имеется задача и ее решение, хотелось бы решение сделать более красивым.
Упрошенно:
1) имеется шаблон:
template<bool param> class T
{
public:
int data_field;
void some_method()
{
if(param)
data_field++;
else
data_field--;
}
};
---
2) имеется class-объединение:
class U
{
public:
union
{
int data_field;
T<true> on_true;
T<false> on_false;
};
C(int value)
{
data_field = value;
}
~C()
{
data_field = 0;
}
void do_some(bool target)
{
if(target)
on_true.some_method();
else
on_false.some_method();
}
};
---
В итоге, в U есть семантически три data_field, которые "географически" распологаются в одном месте.
Мне хочется иметь не три data_field, а одно, как сементически, так и "географически".
Честно говоря не совсем понял зачем тебе все это. Разве нелзя сделать что-то типа :
class U
{ int data_field;
void some_method(bool param)
{ if(param) data_field++;
else
data_field--;
}
friend class A; // или
friend void classB::SomeMetod( );
};