Ok, odświeżam temat, bo chcę do tego podejść trochę inaczej. Tu żadnego problemu nie ma, wszystko "elegancko" działa.
Tylko.... czy nie ma lepszego sposobu by to zrobić. Spójrzmy raz jeszcze na kod:
MailBox::MailBox(mailBox m_box)
{
switch (m_box)
{
case mailBox::host_1:
this->host_mail_ru = gcnew Slanter_Mailboxes::host1();
delete this->host_3;
delete this->host_2;
delete this->host_4;
break;
case mailBox::host_3:
this->host_g_pl = gcnew Slanter_Mailboxes::host3();
delete this->host_1;
delete this->host_2;
delete this->host_4;
break;
case mailBox::host_2:
this->host_o2_pl = gcnew Slanter_Mailboxes::host2();
delete this->host_3;
delete this->host_1;
delete this->host_4;
break;
case mailBox::host_4:
this->host_wp_pl = gcnew Slanter_Mailboxes::host4();
delete this->host_3;
delete this->host_2;
delete this->host_1;
break;
}
}
W pliku h,
enum class mailBox {host_1, host_2, host_3, host_4} String;
Mailboxes::host1^ host_1;
Mailboxes::host2^ host_2;
Mailboxes::host3^ host_3;
Mailboxes::host4^ host_4;
MailBox(mailBox m_box);
Jak wygląda wywoływanie
MailBox^ box = gcnew MailBox(MailBox::mailBox::host_1);
box->host_1->Create(value1, value2);
Zależy mi na jakimś bardziej eleganckim rozwiązaniu, ale nic mi nie wpada do głowy, przede wszystkim, by wywoływanie wyglądało inaczej, np.
box->Create(val1, val2); // czyli bezpośrednio do hosta podanego w konstruktorze;
//ewentualnie jakaś jednakowa funkcja, np.
box->xxx->Create(val1, val2);
Tu są 4 klasy, ale gdy takich klas nazbiera się więcej zrobi się straszny śmietnik.
Może jest do tego jakiś model, który można by wykorzystać, czy inny klasyczny sposób rozwiązania problemu:/
Klasa jest "jednorazowego użycia", tj. wartość hosta, można przypisać tylko przez konstruktor i pracować już tylko na nim.