std::sort & comp - 调用约定?

Ver*_*erv 3 c++ sorting calling-convention

Windows 目标项目,Visual Studio 2012

我正在尝试使用std::sort对结构指针数组进行排序。排序是通过结构中包含的 GUID 完成的,因此我想为排序调用定义一个自定义比较函数。

std::sort(
    std::begin(pUnits),
    std::end(pUnits),
    MyCustomSortFunctionHere
);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,所提供的比较函数的预期调用约定是什么?问题可能是,调用约定在这里是否有影响?

我需要知道的原因是,我的项目设置使用默认的调用约定,因此如果我在没有显式声明调用约定的情况下声明比较函数,我想知道它是否会中断。似乎在任何地方都找不到有关此的任何信息。

谢谢。

Ham*_*let 5

我的推理是,MyCustomSortFunctionHere函数(或类方法?)是按照您要求的调用约定调用的:

extern "C" bool MyCustomSortFunctionHere(Unit const*, Unit const*);
Run Code Online (Sandbox Code Playgroud)

它将用“C”调用约定来调用。由于std::sort()是模板函数,因此它实际上是在同一翻译单元中与您的代码一起编译的,包括调用比较函数的部分,并且调用遵循MyCustomSortFunctionHere您在该翻译单元中指定的规则。

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