在C++中有没有一种方法可以允许隐式转换?

3

我需要在一个C++/CLI项目中使用C库的部分代码。我已经强制将c文件编译为c ++,但问题是该库使用了许多隐式枚举到整数的比较,而c ++不允许这样做。现在我可以适当地转换所有这些,但如果可能的话,我希望在不修改原始库代码的情况下实现结果(因为该库仍在开发中,我希望具有即插即用的功能)。是否有一种方法可以允许c ++隐式转换这些枚举值?


2
你能否贴上一些代码或示例? - edmz
6
为什么不直接使用C编译器编译C代码,然后将其函数作为extern C链接到你的C++项目中呢? - Baum mit Augen
是的,那应该可以直接使用。 - quant
@BaummitAugen 抱歉,我没能说明我想要使用的部分是在该库中的一个 .exe 工具的一部分,而不是一个库项目。我的做法是将工具项目中的 .c 和 .h 文件引用到同一解决方案中的我的项目中。 - Jake Freelander
1
为什么你要强制让他们编译成C++?如果头文件缺少"extern C",你可以将这一部分放在包装文件中并使用它们。 - molbdnilo
据我所知,当编译为clr时,在项目中不允许使用本地c代码。 - Jake Freelander
1个回答

1

这位学究的回答是

C++标准在这方面比C标准更严格,从整数到枚举类型或从void*T*的隐式转换不能直接进行。


您有几种解决方案可供选择:
  • 您的编译器可能具有这样的开关,触发非标准行为(通常被视为“特性”)的编译器开关并不罕见;我不知道是否有这样的开关,但有很多...
  • 您可以将C代码编译为C(如果必要,可能需要链接到单独的库中)
  • 您可以编辑C代码,使其同时编译为C和C++
  • 最后,由于这是一个正在开发的库,您可以要求作者确保他们的代码可以同时编译为C和C++

1
你可以将C代码编译为C语言。由于C和C++之间有许多(并非总是)微妙的差异,因此将C代码编译为C通常是更可取的选择。 - The Paramagnetic Croissant
最终,结果表明库的开发人员确实考虑到了这一点,并提供了一个头文件,我可以在中间库项目中使用,然后将其用于我的项目。 - Jake Freelander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接