我有一些可以分组的函数,但它们不属于任何对象/实体,因此不能被视为方法。
所以,在这种情况下,我会创建一个新的命名空间,并将定义放在header
文件中,将实现放在cpp
文件中。此外(如果需要),我会在该cpp
文件中创建一个匿名命名空间,并将所有不必公开/包含到我的命名空间接口中的其他函数放在那里。
请参见下面的代码(可能不是最佳示例,可以通过另一种程序架构更好地完成,但我只是想不出更好的样本...)
示例代码(header
)
namespace algorithm {
void HandleCollision(Object* object1, Object* object2);
}
示例代码(cpp
)
#include "header"
// Anonymous namespace that wraps
// routines that are used inside 'algorithm' methods
// but don't have to be exposed
namespace {
void RefractObject(Object* object1) {
// Do something with that object
// (...)
}
}
namespace algorithm {
void HandleCollision(Object* object1, Object* object2) {
if (...) RefractObject(object1);
}
}
目前为止还不错。我猜这是管理我的代码的好方法,但如果我有一些基于模板的函数并想做基本相同的事情,我不知道该怎么办。
如果我使用模板,我必须把所有的代码放在header
文件中。好的,但是我应该如何隐藏一些实现细节呢?
我想要从我的接口中隐藏RefractObject
函数,但我不能简单地删除它的声明(因为我把所有的代码都放在一个header
文件中)...
我想到的唯一方法是:
示例代码(header
)
namespace algorithm {
// Is still exposed as a part of interface!
namespace impl {
template <typename T>
void RefractObject(T* object1) {
// Do something with that object
// (...)
}
}
template <typename T, typename Y>
void HandleCollision(T* object1, Y* object2) {
impl::RefractObject(object1);
// Another stuff
}
}
有什么想法可以在代码设计方面做得更好吗?