我是使用std的新手,我正在尝试调用一个以std :: function作为参数的函数。类似于下面的东西:
在一个lib中的.h文件中:
typedef bool t (/*Params*/);
void __stdcall Foo(std::function<t> &function) {m_function = function;}
std::function<t> m_function;
我导入了lib并尝试在另一个cpp文件中使用Foo:
bool Implementation (/*Params*/)
{
// Implementation
}
void Bar()
{
Foo(std::function<t> (Implementation));
}
由于调用约定,当我编译x86(但不是x64)时,我收到链接器错误(LNK2019):
Unresolved External Symbol __stdcall Foo (class std::tr1::function<bool __cdecl(/*Params*/) const&)
由此我收集到我需要将“t”和Implementation实现为__stdcall,但这样做会导致其他编译失败。我还应该注意在同一个库中构建代码时正确编译的代码。有没有办法将调用约定与std :: function相关联?
答案 0 :(得分:0)
尝试:
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;
}