Сначала я определяю два класса, которые наследуются друг от друга.
class A {
};
class B : public A {
};
Затем я объявляю функцию, которая использует std::function<void(A*)>
:
void useCallback(std::function<void(A*)> myCallback);
Наконец, я получаю std::function
другого (но теоретически совместимого) типа из другого места, который я хотел бы использовать в моей функции обратного вызова:
std::function<void(B*)> thisIsAGivenFunction;
useCallback(thisIsAGivenFunction);
Мой компилятор (clang++) отказывается от этого, потому что тип thisIsAGivenFunction
не соответствует ожидаемому типу. Но с B
, наследующим от A
, было бы разумно, чтобы thisIsAGivenFunction
был приемлемым.
Должно ли это быть? Если нет, то почему? И если это так, то что я делаю неправильно?