Код: Выделить всё
In file included from /project/source/main.cpp:7:
/project/source/esched/scheduler.hpp:62:9: error: member initializer 'scheduler' does not name a non-static data member or base class
62 | : scheduler(std::move(new unifex::trampoline_scheduler(depth)))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Следующий - исходный код для этого заголовка, со всем C ++ 20 Определения концепции включены: < /p>
Код: Выделить всё
#include
#include
#include
template
concept scheduler_concept_inline =
std::derived_from;
template
concept scheduler_concept_trampoline =
std::derived_from;
template
concept scheduler_concept =
scheduler_concept_inline || scheduler_concept_trampoline;
// common facade class for libunifex schedulers
template
class SchedulerFacade
{
public:
SchedulerFacade(const sched_t* sched)
: scheduler(sched) {};
SchedulerFacade()
: scheduler(std::move(new sched_t())) {};
~SchedulerFacade() { delete scheduler; }
unifex::_trampoline::scheduler::schedule_sender
auto schedule()
{
return this->scheduler->schedule();
};
protected:
const sched_t* scheduler;
};
class SchedulerInline : public SchedulerFacade
{
// scheduled type: unifex::_inline_sched::scheduler::schedule_task
};
class SchedulerTrampoline : public SchedulerFacade
{
// scheduled type: unifex::_trampoline::scheduler::schedule_sender
public:
SchedulerTrampoline(const std::size_t depth)
: scheduler(std::move(new unifex::trampoline_scheduler(depth)))
{
};
};
< /code>
Я уверен, что с этим кодом может больше проблем. Например, я не совсем уверен в том, как управлять сроком службы объекта для указателя констального t*
При попытке инициализировать Объект PchedulerTrampoline , предоставленный с глубиной рекурсии, не являющейся декорацией для обернутого Unifex :: trampoline_scheduler , но в конструкторе PradelerTrampoline есть что-то не работает? /p>
Обновление: я понимаю, что могу написать следующее, реализуя шаблон планировщика < /code> непосредственно в подклассе. Я не сразу уверен, почему защищенный шаблон, защищенный -qualifeid планировщик из базового класса не распознается для конструктора в подклассе.
class SchedulerTrampoline : public SchedulerFacade
{
public:
SchedulerTrampoline(const std::size_t depth)
: scheduler(std::move(new unifex::trampoline_scheduler(depth)))
{
};
protected:
const unifex::trampoline_scheduler* scheduler;
};
< /code>
посмотрите на примеры, спасибо все. < /p>
Контекст: < /p>
Это после прочтения Статья Люсиана Раду Теодореску о исполнителях C ++ и замещение, в которой упоминается статья о Libunifex как реализацию языкового предложения C ++. :: thread.
Я новичок в C ++.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ata-member