【发布时间】:2011-02-01 17:44:29
【问题描述】:
在混合 C/C++ 项目中,我们需要从 C 调用 C++ 函数。被调用的函数被重载为三个独立的函数,但是我们可以从C端忽略它,我们只选择一个最合适的并坚持那个。
有两种方法可以做到这一点:(1) 编写一个带有 extern "C" 函数的小型 C++ 包装器,将调用转发给所选的重载函数,或者 (2) 只声明我们想要的一个函数的骇人听闻的方式从 C 调用为 extern "C"。
问题是,第二个变体是否有任何缺点(除了噩梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为 exern "C",我们应该预料到 C++ 端会出现问题,还是按照标准定义好?
【问题讨论】:
-
用“hackish”这个词来描述解决方案不是代码味道吗?
-
是的,这绝对是代码异味,我的一位同事问我这个问题,我建议使用解决方案 1,因为我认为这样更清洁。但与此同时,我对如果我们选择解决方案 2 会发生什么感到好奇......当存在不太不确定的解决方案时,我们不得不问的事实已经是代码味道 :)
标签: c++ c overloading