我有一个cpp文件(不是类)中的静态方法。 我想全局使用它,而不需要将其重新声明为extern。 在这种情况下,是否可以使用全局函数指针指向此静态方法,并且全局使用此函数指针?现有的静态方法可以使用函数指针进行全局吗?
1
A
回答
6
它可以做你想做的事情,但是为什么你会避免使用extern,当它正是你想通过一个更复杂的(和不可读的)机制来模拟?
1
C中的静态声明告诉编译器不要添加函数符号表。这意味着如果其他模块需要,提供者无法链接该功能。该函数仍然存在(但对链接器不可见),因此如果将函数的地址记录在指针中,则可以毫无问题地调用该函数。
所以简短的回答是肯定的,没关系。
0
是的,在隐藏实现时制作公共指针通常是您可能期望的工厂样式模式。
知道自己为什么说“我想全局使用它而不将其重新声明为作为extern”可能很有趣。
为什么要将声明从static(仅在该模块中可用)更改为extern(使其在模块外部可用并将其发布)您想要避免的操作?
0
如果它在全局名称空间中的cpp文件中是静态的,那么该函数只能从该cpp文件中直接使用。它是一种私人帮手功能。
你可以做的是在函数原型上做一个typedef,并引入一个公共函数,该函数返回一个函数指针或一个指向不同函数的指针表,这通常是为了实现插件和有一些回调或API方法注册。 +要点是你没有强大的绑定功能。
0
静态说明符隐含内部链接。
您希望使用外部链接的静态,而不需要显式存储说明符。如果你的函数在命名空间范围内,只需删除'static'说明符。命名空间范围的默认行为在外部链接时是静态的。
相关问题
- 1. 传递对象的方法函数指针接受[静态方法指针/全局函数]指针
- 2. 您可以使用AJAX页面方法进行非静态函数调用吗?
- 3. 全局函数和非静态成员函数指针设计
- 4. 一个类的静态函数可以访问全局静态变量吗?
- 5. 可以通过C中的函数指针调用静态函数吗?
- 6. 全局静态指针问题
- 7. 局部指针指向全局函数
- 8. 方法指针的静态数组
- 9. 指向全局静态变量的指针 - 不安全?
- 10. 可以使用静态方法实现接口吗?
- 11. 用函数指针进行静态结构初始化
- 12. 通过函数指针使用的函数可以内联吗?
- 13. 我可以有一个异常的静态全局实例吗?
- 14. 静态方法在使用参数时可以使用吗?
- 15. 静态构造函数可以降低访问静态方法的性能吗?
- 16. 全局静态布尔指针使用pthread导致段错误
- 17. 我可以有一个弱静态指针吗?
- 18. 在静态方法中访问全局类的全局方法
- 19. 静态函数与类的静态指针有什么区别
- 20. 无法通过静态方法调用指向成员函数的指针
- 21. 隐藏实现成员函数(如静态全局函数)的
- 22. C++调用静态函数指针
- 23. 嘲笑静态/全局函数的最简单方法?
- 24. 有人可以解释这个函数指针语法吗?
- 25. 正在返回一个指向静态局部变量安全的指针吗?
- 26. 将C++实例方法分配给全局函数指针?
- 27. 可以隐藏静态方法吗?
- 28. free_function可以是静态类方法吗?
- 29. 函数指针的静态映射
- 30. 使用指向非静态成员函数的指针实现回调
...或者你可以用一个公共名称编写一个额外的函数,它只是简单地调用静态函数来完成这项工作,但为什么不把原始函数放在第一位呢? – 2011-02-10 21:12:16