Я очень плохо знаком с использованием 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?
Пытаться:
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;
}
Других решений пока нет …