例如,我有一个markerdisplay.cpp文件。 markerdisplay成员函数将如下所示。
void MarkerDisplay::setMarkerStatus(MarkerID id, StatusLevel level, const std::string& text)
{
.....
}
我可以在markerdisplay.cpp中使用非成员函数吗?
例如,
bool validateFloats(const visualization_msgs::Marker& msg)
{
...
}
函数validateFloats不是成员函数,我也没有在头文件中声明它。我只在validateFloats.cpp文件中使用此函数。
有人告诉我这可能会导致一些问题。这是真的吗?
答案 0 :(得分:11)
如果您不需要.cpp
之外的函数,则在该文件中声明并定义它就足够了。当然,你仍然需要在第一次使用之前声明它,但这是我能想到的唯一“问题”。
如果不需要,在标题中声明函数是一个好主意 not ,因为你使用了更少的“项目 - 公共”名称,并且更容易找到函数的所有用途,从而使代码更易于维护。
如果您未在标题中声明该功能,则应将其设为static
:
static bool validateFloats(const visualization_msgs::Marker& msg);
或将其放在匿名命名空间中:
namespace {
bool validateFloats(const visualization_msgs::Marker& msg);
}
(首选)以避免意外的交叉翻译 - 单位名称冲突。
答案 1 :(得分:6)
我的问题是:我可以在markerdisplay.cpp中使用非成员函数,例如......
是的,你可以这样做。
最好的选择是在实施翻译单元中提供该功能,如果它不打算在公共API中使用。
您甚至可以在匿名命名空间中完全隐藏它(包括链接器)
namespace {
bool validateFloats(const visualization_msgs::Marker& msg) {
// ...
}
}
或者只是在翻译单元中定义static
函数应具有相同的效果:
static bool validateFloats(const visualization_msgs::Marker& msg) {
// ...
}