Установка соглашения о вызовах для std :: function

Я очень плохо знаком с использованием std, и в настоящее время я пытаюсь вызвать функцию, которая принимает std :: function в качестве параметра. Нечто похожее на ниже:

В файле .h в одной lib:

typedef bool t (/*Params*/);

void __stdcall Foo(std::function<t> &function) {m_function = function;}

std::function<t> m_function;

Я импортировал библиотеку и попытался использовать Foo в другом файле cpp:

bool Implementation (/*Params*/)
{
// Implementation
}

void Bar()
{
Foo(std::function<t> (Implementation));
}

Я получаю ошибку компоновщика (LNK2019) при компиляции для x86 (но не для x64) из-за соглашения о вызовах:

Unresolved External Symbol __stdcall Foo (class std::tr1::function<bool __cdecl(/*Params*/) const&)

Из этого я понял, что мне нужно пометить «t» и «Реализация» как __stdcall, но это вызывает другие ошибки компиляции. Я должен также отметить, что код скомпилирован правильно, когда он был собран в той же самой библиотеке. Есть ли способ связать соглашение о вызовах с std :: function?

1

Решение

Пытаться:

void Foo(const std::function<bool()> &func)
{
func();
}

bool Implementation (/*Params*/)
{
cout << "Implementation"<<endl;
return true;
}

void Bar()
{
Foo(std::function<bool()>(&Implementation));
}

int main()
{
Bar();
return 0;
}
0

Другие решения

Других решений пока нет …