gpt4 book ai didi

c++ - 在 C 结构中定义 C++ 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:59 25 4
gpt4 key购买 nike

看完之后

  1. > possible to define a function inside a C structure? [duplicate]
  2. > Define functions in structs

我想知道以下解决方法是否可行,以及它在编译器级别的最深远影响是什么。

// foo.h
typedef struct foo
{
int i;
#ifdef __cplusplus
foo(int _i) : i(_i) {};
#endif
} foo;

// bar.c
#include "foo.h"
foo bar;
bar.i = 1;

// bar.cpp
#include "foo.h"
foo bar(2);

在我看来,利用“结构多态性”是一个很好的技巧,能够保持 C 遗留代码的可移植性,但我觉得在某种程度上我现在正在使用两个不同 类型。

最佳答案

从您的问题中查看此 struct 定义:

typedef struct foo
{
int i;
#ifdef __cplusplus
foo(int _i) : i(_i) {};
#endif
} foo;

当使用针对同一平台的 C 和 C++ 编译器编译时,可能会产生相同的内存表示。但是你不应该永远依赖它。 C++ 编译器看到的类型比 C 编译器看到的类型多了一个成员,所以它们是根本不同的类型。因此,将它们视为相同是未定义的行为。如果这按您预期的那样工作,那是纯属运气,并且随时可能会出错。

正如已经评论过的,引入一个virtual 函数几乎肯定会破坏它,因为 C++ 编译器需要将 vtable 存储在 struct< 中的某处。但即使没有它,也有许多其他方式可能会破坏它,例如因为编译器会添加不同的填充。只是不要这样做。

您可以改为使用 plain C struct 并在需要时在 C++ 中添加一个包装器类

关于c++ - 在 C 结构中定义 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433070/

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