现有的静态方法可以使全局使用函数指针吗?

时间:2011-02-10 19:53:43

标签: c++ c

我在cpp文件中有一个静态方法(不在类中)。 我想在全球范围内使用它而不将其重新声明为extern。 在这种情况下,可以使用指向此静态方法的全局函数指针 全局使用此函数指针??

5 个答案:

答案 0 :(得分:6)

有可能做你想做的事,但是为什么你会通过一个更复杂(和不可读)的机制来完成你试图模仿的东西时避免使用extern?

答案 1 :(得分:1)

C中的静态声明告诉编译器不要在符号表中添加函数。这意味着如果其他模块需要,打印机无法链接该功能。该函数仍然存在(但链接器是不可见的),所以如果一个人在一个指针中记录函数的地址,就可以毫无问题地调用该函数。

如此简短的回答是肯定的,没关系。

答案 2 :(得分:0)

是的,在隐藏实现时创建公共指针通常是您在工厂样式模式中所期望的。

知道为什么你说“我想在全球范围内使用而不重新声明”作为extern,这可能会很有趣。 为什么要将静态更改声明(仅在该模块中可用)更改为extern(使其在模块外部可用并发布)您想要避免的操作?

答案 3 :(得分:0)

如果它在全局命名空间中的cpp文件中是静态的,则该函数只能直接在该cpp文件中使用。它是一种私人助手功能。

你可以做的是在函数的原型上创建一个typedef,并引入一个公共函数,它返回一个指向函数的指针或一个指向不同函数的指针表,这通常是为了实现插件并且有注册了一些回调或api方法。 +点是你没有强大的功能绑定。

答案 4 :(得分:0)

静态说明符意味着内部联系。

您希望静态使用外部链接,这不需要显式存储说明符。如果您的函数位于命名空间范围内,只需删除“静态”说明符。命名空间范围的默认行为是静态的,具有外部链接。