Инициализатор участника для подкласса шаблона «не называет нестатический член данных или базовый класс» [дублировать]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Инициализатор участника для подкласса шаблона «не называет нестатический член данных или базовый класс» [дублировать]

Сообщение Anonymous »

Следующий код не может компилироваться с Clang ++ 17 -Std = GNU ++ 20 или clang ++ 17 -Std = c ++ 20 . Компилятор дает следующее сообщение: < /p>

Код: Выделить всё

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 ++, который я написал здесь, я не вижу, как защищенного планировщика участник в планировании PradeLerfacade Не распознается для инициализатора в конструкторе в подклассе, SchedulerTrampoline: Schedulerfacade
Следующий - исходный код для этого заголовка, со всем 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*
здесь. Вызовы Delete В деструкторе это казалось проще, чем попытка обернуть указатель планировщика в std :: unique_ptr .
При попытке инициализировать Объект 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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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