Не могу определить переменную std :: function из указателя виртуального метода в vs2013 - PullRequest
0 голосов
/ 07 ноября 2018

В моем проекте я пытаюсь определить переменную 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

...