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)
现在我的问题是,所提供的比较函数的预期调用约定是什么?问题可能是,调用约定在这里是否有影响?
我需要知道的原因是,我的项目设置使用默认的调用约定,因此如果我在没有显式声明调用约定的情况下声明比较函数,我想知道它是否会中断。似乎在任何地方都找不到有关此的任何信息。
谢谢。
我的推理是,MyCustomSortFunctionHere函数(或类方法?)是按照您要求的调用约定调用的:
extern "C" bool MyCustomSortFunctionHere(Unit const*, Unit const*);
Run Code Online (Sandbox Code Playgroud)
它将用“C”调用约定来调用。由于std::sort()是模板函数,因此它实际上是在同一翻译单元中与您的代码一起编译的,包括调用比较函数的部分,并且调用遵循MyCustomSortFunctionHere您在该翻译单元中指定的规则。
如果您在同一翻译单元中定义比较函数,则不应指定任何约定。如果该函数是在不同的翻译单元中定义的,则需要向编译器表达正确的调用约定。
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |