如何在 .h 文件中定义函数体?
有时我在 .h 文件中定义小型全局函数的主体(静态内联)。有用。
现在我有更大的全局功能。我需要在 .h 文件中定义它。我不希望它是静态内联的。我使用“虚拟模板”尝试了以下技巧:
template <typename Tunused> int myfunction(...) {
...
}
为了实现这一点——在 .h 文件中定义全局函数。
编译器抱怨“无法推断‘未使用’的模板参数”。
你们明白我想做什么吗?我怎样才能欺骗编译器?我想我需要将模板 arg 的一些虚拟用法取消插入到函数中,以便编译器可以推断出它。
有人可以帮忙吗?
Sometimes I define bodies of small global functions in .h files (static inline). It works.
Now I have larger global function. I need to to define it in .h file. I do not want it to be static inline. I tried the following trick with "dummy template":
template <typename Tunused> int myfunction(...) {
...
}
to achieve this -- to define global function in .h file.
Compiler complains "cannot deduce template argument for 'unused'".
Do you guys understand what I an trying to do ? How can I trick the compiler ? I think I need to unsert some dummy usage of template arg into the function so that compiler can deduce it.
Can anyone help ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
只需将其原型放在 .h 文件中,并将其实现放在单个 .c 文件中:
在 .h 文件中:
在 .c 文件中:
Just put its prototype in the .h file, and its implementation in a single .c file:
In .h file:
In .c file:
您不应该仅仅在函数上使用“static”,以便可以在标头中定义它们,而应使用“inline”。
一旦使用“内联”,就不需要任何模板“技巧”,只需定义函数即可:
当您想要将定义移出标头时,删除内联并在 .cpp 文件中定义函数。
You should not use "static" on functions merely so you can define them in a header, use "inline" for that.
And once you use "inline", you don't need any template "tricks", just define the function:
When you want to move the definition out of the header, remove the inline and define the function in a .cpp file.
老实说,我不建议放置大型非模板函数的定义
在 .h 文件中,除非有明确的原因不能放置定义
在.cpp 文件中。
如果您必须将定义放入 .h 中,以下代码可能会有所帮助:
如果您可以说明必须将定义放入 .h 中的原因,
可能会发布更好的建议。
编辑:
根据 Bo Persson 的指出重写了代码。
Honestly, I don't recommend putting large non-template function's definition
in .h file unless there is definite reason that you can't put the definition
in .cpp file.
If you have to put the definition in .h, the following code might help:
If you could show the reason that you have to put the definition in .h,
better suggestions may be posted.
Edit:
Rewrote the code in the light of Bo Persson's pointing out.
如果您真的想要这样做并且对内联感到偏执。您可以执行以下操作:
然后只需在
#include "myheader.h"
行(在 cpp 文件中)其中行之前#define DEFINE_MY_FUNCTION
即可。然而,正如其他人所建议的那样,有很多理由选择传统路线,尤其是任何实现调整都需要重新编译任何使用
myfunction()
的文件。If you really want to do this and are paranoid about inlining. You could do the following:
Then just
#define DEFINE_MY_FUNCTION
before one of your#include "myheader.h"
lines (in a cpp file).However, there are many reasons to go the conventional route, as others have advised, not least the fact that any implementation tweaks will require recompilation of any file that uses
myfunction()
.