Как реализовать интерфейс в C++?
Каким образом реализовываются интерфейсы в C++? Я много программирую на golang и для меня интерфейс в golang -- это контракт, который предоставляется как публичное API. Каким образом это реализовывается в c++? Абстрактные классы?
Пример интерфейса в golang
type Contract interface {
func MyMethod() int
}
func Run(obj Contract) int {
return obj.MyMethod() + 1
}
В данном случае, я создал контракт Contract, который использую в Run. В Run я могу передать любой объект, который удовлетворяет контракту, т.е. имеет соответствующий метод
Ответы (1 шт):
Автор решения: goldstar_labs
→ Ссылка
#include <iostream>
#include <string>
#include <functional>
template <typename T>
void Printer(const T& object)
{
object.print();
}
class Printable
{
public:
void print() const { std::cout << "Hello from Printable" << std::endl; }
};
class NonPrintable
{
public:
void not_print() const { std::cout << "Hello from NonPrintable" << std::endl; }
};
int main()
{
Printable o1;
NonPrintable o2;
Printer(o1);
Printer(o2); // error C2039: 'print': is not a member of 'NonPrintable'
return 0;
}
В Run я могу передать любой объект, который удовлетворяет контракту, т.е. имеет соответствующий метод
По аналогии с вашим, в данном примере шаблонная функция Printer может быть вызвана для любых типов, у которых определен метод print().