为std :: function设置调用约定

时间:2013-01-28 02:27:04

标签: c++ stl calling-convention

我是使用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相关联?

1 个答案:

答案 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;
}