// MT3-Q2.cpp #include #include #include #include template bool Executor(CallObj obj, size_t millisec, size_t numTries = 10) { using namespace std::chrono_literals; size_t count = 0; bool retVal = false; while (true) { if (obj()) { std::cout << "\n operation succeeded\n"; return true; } else { std::cout << "\n retrying operation"; if (++count >= numTries) { std::cout << "\n operation failed after " << numTries << " retries\n"; return false; } std::this_thread::sleep_for(std::chrono::microseconds(1000*millisec)); } } } using CallType = std::function; int main() { CallType ct = []() { return false; }; Executor(ct, 500, 5); ct = []() { static size_t count = 0; if (++count > 2) return true; return false; }; Executor(ct, 500, 5); }