Cor*_*ein 22 c++ global function
我想要一个不是类成员的函数,可以从任何类访问.
我假设我必须#include在声明函数的头文件中,但我不知道在哪里定义这样的全局函数.
是否有充分的理由反对首先拥有这样的功能?
Nec*_*lis 27
你需要一个体(在cpp文件中):
int foo()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
以及头文件中的定义/原型,在使用该函数之前将包含它:
#ifndef MY_FOO_HEADER_
#define MY_FOO_HEADER_
int foo();
#endif
Run Code Online (Sandbox Code Playgroud)
然后在其他地方使用它:
#include foo.h
void do_some_work()
{
int bar = foo();
}
Run Code Online (Sandbox Code Playgroud)
或者使用内联函数(不保证它会被内联,但对于小功能非常有用,比如foo):
#ifndef MY_FOO_HEADER_
#define MY_FOO_HEADER_
inline int foo()
{
return 1;
}
#endif
Run Code Online (Sandbox Code Playgroud)
或者你可以滥用基于C风格的头部函数(所以这在一个标题中,static强制它只存在于一个编译单元中,你应该避免这种情况):
#ifndef MY_FOO_HEADER_
#define MY_FOO_HEADER_
static int foo()
{
return 1;
}
#endif
Run Code Online (Sandbox Code Playgroud)
你所谓的全局函数通常被称为自由函数,它们是一件好事.
您可以将其定义为类的成员函数,但在该类的范围之外.
double squared(double x) {
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用inline头文件中的关键字定义的简单函数,或者只是在那里声明它
double squared(double x);
Run Code Online (Sandbox Code Playgroud)
并将实现(第一个示例)放入*.cpp文件中.
在头文件中:
// someheader.h
#ifndef MY_GLOBAL_FUN
#define MY_GLOBAL_FUN
void my_global_fun();
#endif
Run Code Online (Sandbox Code Playgroud)
在实现文件中:
#include "someheader.h"
void my_global_fun()
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
在需要该功能的其他文件中:
#include "someheader.h"
void f()
{
my_global_fun();
}
Run Code Online (Sandbox Code Playgroud)
像这样的自由函数很有用,并且没有太多反对使用它们的理由。根据您的用例,将这些函数放在特定的位置可能是合适的namespace,以避免与您可能使用的其他库发生名称冲突。
| 归档时间: |
|
| 查看次数: |
72179 次 |
| 最近记录: |