Как реализовать интерфейс в 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().

→ Ссылка