В Java это possible to declare, что параметр реализует несколько интерфейсов. Вы должны использовать синтаксис дженериков, но вы можете:Синтаксис параметра, расширяющего два класса
public <T extends Appendable & Closeable> void spew(T t) {
t.append("Bleah!\n");
if (timeToClose())
t.close();
}
В C++, общий шаблон должен использовать классы, содержащие только чистые виртуальные функции, интерфейсы:
class IAppendable {
public:
virtual void append(const std::string&) = 0;
};
class ICloseable {
public:
virtual void close() = 0;
};
И это тривиально, чтобы написать функцию который принимает ICloseable
(это просто полиморфизм):
void closeThis(ICloseable&);
Но что сигнатура функции, которая принимает параметр, который, как и в примере Java, унаследованный от какICloseable
иIAppendable
?
вопрос: как реализовать класс, который inherets как из '' IAppendable' и ICloseable'? Или: как создать шаблонный класс/функцию/и т. Д. чей параметр 'typename T' должен игнорировать как' IAppendable', так и 'ICloseable'? – EyasSH
Последний (я отредактировал для ясности). Реализация класса, реализующего оба, тривиальна: 'class A: public IAppendable, public ICloseable {};' – thirtythreeforty