Это код Здесь: < /p>
#include
#include
#include
#include
namespace experimental {
namespace guard {
template
class guard_if {
public:
struct promise_type;
using handle_type = std::coroutine_handle;
guard_if(handle_type handle) : coro(handle) {}
~guard_if() {
if (coro) coro.destroy();
}
handle_type coro;
struct promise_type {
guard_if get_return_object() const noexcept{
return guard_if{ handle_type::from_promise(*this) };
}
std::suspend_always initial_suspend() const noexcept {
return {};
}
std::suspend_always final_suspend() const noexcept {
return {};
}
void return_void() noexcept {}
void unhandled_exception() {
std::terminate();
}
};
// Check if conditions pass; if not, set triggered and yield out
handle_type attempt_execute(U arg) {
for (const auto& check : _GuardChecks) {
if (check(arg))
continue;
else {
_GuardTriggered = true;
co_yield std::noop_coroutine();
}
}
// Check if still false; if so, call the executing function
if (!_GuardTriggered)
_ExecuteableFunction();
co_return;
}
private:
std::function _ExecuteableFunction;
std::vector _GuardChecks;
bool _GuardTriggered;
public:
// Constructor accepting a function and a pack of guard check functions
template
guard_if(std::function function, Args&&... checks) : _ExecuteableFunction(function), _GuardTriggered(false) {
(_GuardChecks.emplace_back(std::forward(checks)), ...);
}
};
}
}
// Specialize std::coroutine_traits for guard_if
namespace std {
template
struct coroutine_traits {
using promise_type = typename experimental:
};
}
#pragma once
< /code>
Теперь я относительно новичок в совместных упражнениях C ++ (хотя, если я правильно понимаю, должен работать так же, как и вы возврат в C#. Если это неправильно, я извиняюсь). Однако этот код не работает, и я не уверен, почему. Компилятор возвращает следующее: < /p>
'resperation_type': не является членом 'std :: coroutine_traits '< /p>
< /blockquote>
Я определил как корезок, так и даже специализация, которая проходит Ording_type. < /P>
< P> Что именно происходит эта ошибка? Я не могу найти много информации, за исключением того, что год назад была ошибка MSVC, вызывая одно и то же, но я сомневаюсь, что это та же проблема. Вероятно, мне не хватает чего-то, что мне не хватает, но я просто не вижу его. Есть идеи?#include
#include
#include "guard.h"
using namespace experimental;
void print_success(void) {
std::cout 999; });
test_guard.attempt_execute(10);
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ine-traits
Мобильная версия