std :: sort& comp - 召唤大会?

时间:2017-08-19 19:22:11

标签: c++ sorting calling-convention

  

Windows目标项目,   Visual Studio 2012

我试图使用std::sort对结构指针数组进行排序。排序是从结构中包含的GUID完成的,所以我想为我的排序调用定义一个自定义比较函数。

std::sort(
    std::begin(pUnits),
    std::end(pUnits),
    MyCustomSortFunctionHere
);

现在我的问题是,提供的比较功能的预期调用约定是什么?问题可能是,呼叫惯例在这里是否会产生影响?

我需要知道的原因是,我的项目设置使用默认的调用约定,所以如果我声明我的比较函数而没有明确声明调用约定,我想知道它是否会破坏。似乎无法在任何地方找到任何相关信息。

感谢。

2 个答案:

答案 0 :(得分:4)

我的理由是MyCustomSortFunctionHere函数(或类方法?)使用您要求的调用约定调用:with

extern "C" bool MyCustomSortFunctionHere(Unit const*, Unit const*);

它将用" C"召集会议。 由于std::sort()是一个模板函数,它实际上与您的代码一起编译在同一个翻译单元中,包括调用比较函数的部分,并且对MyCustomSortFunctionHere的调用遵循您指定的规则在那个翻译单位。

如果要在同一个翻译单元中定义比较功能,则应该不指定任何约定。 如果函数是在不同的转换单元中定义的,则需要向编译器表达哪个是正确的调用约定。

答案 1 :(得分:0)

您的MyCustomSortFunctionHe如何实现?
一个。使用仿函数或,
湾使用方法签名bool cmp(const Type1& a,const Type2& b)

在第一种方法的情况下" thiscall"使用调用约定,在第二种方法的情况下使用__cdecl调用约定。 我使用Visual Studio编译器为上述每种方法生成的代码的反汇编验证了上述内容。

希望这有帮助!