В моем проекте я пытаюсь определить переменную std :: function из указателя виртуального метода:
#include <functional>
class VirtualClass
{
public:
virtual void foo(int x) = 0;
};
class DerivedClass : public VirtualClass
{
public:
virtual void foo(int x) override
{
// I am foo from DerivedClass;
}
};
int main()
{
DerivedClass derivedClass;
std::function<void(VirtualClass&, int)> fooFunc = &VirtualClass::foo; //doesn't compile
fooFunc(derivedClass, 0);
return 0;
}
Этот код компилируется в Visual Studio 2017, но не компилируется в Visual Studio 2013. Возможно ли исправить ошибку компиляции в версии 2013 без перехода на чистые указатели и продолжать использовать std :: function?
Обновление:
сообщение об ошибке следующее:
Ошибка 1, ошибка C2664: 'void std :: _ Func_class <_Ret, VirtualClass &, int> :: _ Set (std :: _ Func_base <_Ret, VirtualClass &, int> *)': невозможно преобразовать аргумент 1 из '_Myimpl * 'to' std :: _ Func_base <_Ret, VirtualClass &, int> * 'c: \ программные файлы (x86) \ microsoft visual studio 12.0 \ vc \ include \ functions 506 1 ConsoleApplication1