All*_*uan 4 c++ class member-functions
例如,我有一个markerdisplay.cpp文件.markerdisplay成员函数看起来像下面的代码.
void MarkerDisplay::setMarkerStatus(MarkerID id, StatusLevel level, const std::string& text)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
我可以在markerdisplay.cpp中使用非成员函数吗?
例如,
bool validateFloats(const visualization_msgs::Marker& msg)
{
...
}
Run Code Online (Sandbox Code Playgroud)
函数validateFloats不是成员函数,我也没有在头文件中声明它.我只在validateFloats.cpp文件中使用此函数.
有人告诉我这可能会引起一些问题.真的吗?
Bau*_*gen 11
如果您不需要该函数.cpp,则在该文件中声明和定义它就足够了.当然,在第一次使用之前你仍然需要声明它,但这是我能想到的唯一"问题".
这是相当不错的主意不来的头部声明功能,如果因为你使用了更少的"项目公开"的名称,并使其更容易找到函数的所有用途,从而使代码更易于维护,不需要.
如果你没有在标题中声明该函数,你应该这样做static:
static bool validateFloats(const visualization_msgs::Marker& msg);
Run Code Online (Sandbox Code Playgroud)
或者将它放在匿名命名空间中:
namespace {
bool validateFloats(const visualization_msgs::Marker& msg);
}
Run Code Online (Sandbox Code Playgroud)
(首选)避免意外的交叉翻译 - 单位名称冲突.
我的问题是:我可以在markerdisplay.cpp中使用非成员函数,例如......
是的,你可以这样做.
如果不打算在公共API中使用该功能,那么最好的选择是在实现翻译单元中提供该功能.
您甚至可以在匿名命名空间中完全隐藏它(包括链接器)
namespace {
bool validateFloats(const visualization_msgs::Marker& msg) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
或者只是static在翻译单元中定义一个函数应该具有相同的效果:
static bool validateFloats(const visualization_msgs::Marker& msg) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |