шаблон проектирования такой, что доступ к классу Derived возможен только через библиотеку

Попытка создать дизайн, в котором классы, реализующие интерфейсы, должны вызываться только из библиотеки. Другими словами, доступ к реализованным интерфейсам должен осуществляться через библиотеку (TopLib). Похоже на случай, когда делегат должен быть использован. Что вы думаете о дизайне? Это работает, но был бы признателен за отзывы и предложения о том, как сделать его лучше, надежнее и надежнее.

class Interface
{
protected:
virtual void hi(void) = 0;
};

class ABC : private Interface {
protected:
ABC() {}
virtual void hi() {
std::cout << "abc" << std::endl;
}
};

class XYZ : private Interface {
protected:
XYZ() {}
virtual void hi() {
std::cout << "xyz" << std::endl;
}
};

template<typename T>
class TopLib : private T
{
public:
void sayhi() {
hi();
}
};

int _tmain(int argc, _TCHAR* argv[])
{
TopLib<ABC> b;
b.sayhi();

TopLib<XYZ> c;
c.sayhi();
//c.hi(); <- fails

//ABC test; <- fails
//test.hi(); <- fails

getchar();
return 0;
}

-2

Решение

Модификаторы доступа могут быть смягчены в производных классах, так что вы находитесь в зависимости от того, кто реализует интерфейс. Ничто не мешает мне сказать

class FooBarBaz : private Interface {
public:
FooBarBaz() {}
virtual void hi() { // Implements Interface::hi()
std::cout << "see what i mean!" << std::endl;
}
};

и используя его с или без TopLib<FooBarBaz>,

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector