'orday_type' не является членом std :: coroutine_traitsC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 'orday_type' не является членом std :: coroutine_traits

Сообщение Anonymous »

У меня есть шаблон класса под названием «Guard_if», который должен обеспечивать охранников против выполнения функций, если конкретные критерии не будут соблюдены. Этот шаблон класса занимает два основных параметра: функция std :: с возвратом типа T и упакованный список аргументов Lamba с возвратом типа U. T и U могут быть взаимоисключающими или эксклюзивными. Функция базового дескриптора будет выполнена через все поставляемые LAMBA и допустит возврат no_op, если какая -либо из проверки не удастся, в противном случае вызовет функцию, указанную с помощью функции std :: co_return. < /p>
Это код Здесь: < /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::guard::guard_if::promise_type;
};
}
#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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»