Я хочу создать производный класс, который может вызывать метод базового класса, используя std :: async.Когда я пытаюсь сделать это, я получаю сообщение компилятора о том, что оно защищено, но я передаю «this» как экземпляр, являющийся производным классом функции, которую я хочу выполнить.
Вот мой MCVE:
#include <iostream>
#include <thread>
#include <future>
class Base
{
protected:
bool threadFunc()
{
std::cout << "threadFunc called" << std::endl;
return true;
}
};
class Derived : public Base
{
public:
void callBaseMethodAsync()
{
std::future<bool> results = std::async(std::launch::async, &Base::threadFunc, this);
}
};
int main()
{
Derived test;
test.callBaseMethodAsync();
}
, что приводит к сообщению об ошибке компилятора с gcc 4.8:
g++ -o source.o -c -std=c++11 source.cpp
source.cpp: In member function 'void Derived::callBaseMethodAsync()':
source.cpp:8:10: error: 'bool Base::threadFunc()' is protected
bool threadFunc()
^
source.cpp:20:75: error: within this context
std::future<bool> results = std::async(std::launch::async, &Base::threadFunc, this);
Почему std :: async делает защищенный методне доступны из производного класса?Каковы некоторые альтернативные способы использования async для вызова метода базового класса из производного класса?