gpt4 book ai didi

c++ - 为什么 extern “C” 在这里分组 C++ 类(不是标题)?

转载 作者:IT老高 更新时间:2023-10-28 22:26:42 26 4
gpt4 key购买 nike

我在搜索 SVM 库时遇到了 BudgetedSVM .

在源码中,我发现了一个不寻常的用法,就像这样:

#sample.h

#ifndef SAMPLE_H
#define SAMPLE_H

//no header included or namespace declared here

#ifdef __cplusplus
extern "C" {
#endif

//no header included or namespace declared too

class Sample: public Parent
{
public:
Sample();
~Sample();

type0 fun(type1 val1, type2 val2);
...
};

#ifdef __cplusplus
}
#endif

#endif // SAMPLE_H

正如所见, header 中不需要额外的 header 或命名空间,它们都在 cpp 文件中。

以下是我的想法:

  1. 为什么通常用于C接口(interface)的extern "C"对C++类进行分组?这种用法有什么好处吗?

  2. 即使出现type0type1type2,这里也不包括它们自己的header,而是在cpp文件中(例如样本.h)。但是,当我调用类 Sample 时,我必须包含这些 header (例如 type0.htype1.htype2 .h),看起来很不方便。

最佳答案

根据C++ Standard在确定类成员名称和类成员函数的函数类型的语言链接时忽略C语言链接。

所以这样的分组看起来毫无意义,除非 type0type1type2 是内联定义的函数指针,在这种情况下它们将具有 C 链接.

如果 type0type1type2 是用户定义的类型,并且它们的定义放在单独的 header 中,则违反了良好的 C/C++样式规则 - 所有标题都应是独立的,不需要额外的包含来编译。

回答主要问题(“为什么?”) - 看起来 C 语言链接只是从另一个标题中盲目复制粘贴(可能是纯 C,这很有意义)。或者它可能是故意的——出于“统一”的原因。

关于c++ - 为什么 extern “C” 在这里分组 C++ 类(不是标题)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42223254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com