Я хочу связать функцию-член с std::function<void(void)>
. Я слышал, что функции-члены принимают один дополнительный параметр, который является указателем экземпляра. Поэтому я вызываю std::bind(&Class::Function, this, parameter)
, но когда я выполняю объект функции, он выдает ошибку времени выполнения.Выполнение связанных std :: function throws std :: bad_function_call
Необработанное исключение в в 0x748D4B32 в application.exe: Microsoft C++ исключение: станд :: bad_function_call в ячейку памяти 0x0114F4E8.
Параметр является указателем на один из моих собственных struct
. Как я поступаю неправильно? Какая дополнительная информация вам нужна?
Обновление: Вот мой код.
class ModuleRenderer
{
struct Pass{ std::function<void()> Function; /* many more members... */ };
std::vector<std::pair<std::string, Pass>> passes;
enum Drawfunc{ FORMS, SKY, LIGHTS, QUAD, SCREEN };
void AddPass(std::string Name, Drawfunc Function)
{
Pass pass;
// set some of the members
// ...
passes.push_back(std::make_pair(Name, pass));
Pass *pointer = &(passes.back().second);
switch (Function)
{
case FORMS:
pointer->Function = std::bind(&ModuleRenderer::DrawForms, this, pointer);
break;
// analogeously for the other cases
// ...
}
}
void DrawForms(Pass *pass)
{
// ...
}
// is called consecutively after adding all passes
void Update()
{
for(auto i : passes)
// some initializing based on members of pass
i.Function();
}
};
Как насчет того, чтобы показать нам код, который выбрасывает это исключение? Укажите строки, в которых вы назначаете указатель функции-члена функции 'std :: function'. 'bad_function_call' вызывается при попытке вызвать' std :: function', у которого нет цели, поэтому код привязки имеет значение. – Praetorian
@Praetorian Я раньше не использовал 'std :: bind', поэтому я не знал, какой код важен. И в моем проекте много кода. Но, благодаря вашему комментарию, я мог бы предоставить необходимые фрагменты своего кода. Я обновил свой вопрос. – danijar
'for (auto i: pass)' будет копировать каждый элемент 'pass' в' i' - у 'Pass' есть назначенный конструктор копии? – Casey