我可以得到一个对象实例的名称空间/函数/类层次结构吗?——c++



我有一个外部Parameter class,我需要定义为不同名称空间内的全局对象(实例)。我将类的每个实例的指针插入到映射中。

问题:

不是所有的参数名称都是唯一的,我需要一个唯一的名称作为每个实例的关键,我可以得到对象名称的命名空间层次结构作为他的名字的前缀吗?

RegisteredGlobalObject.cpp:

RegisteredGlobalObject::RegisteredGlobalObject(const string& uid, int val) {
m_mapUidToParamPair[uid] = val;
}

ParamsDef.h:

namespace base {
namespace vpeservice {
extern RegisteredGlobalObject int_64_param;
} // namespace vpeservice
namespace otherservice {
extern RegisteredGlobalObject int_64_param;
} // namespace otherservice
} // namespace base

ParamsDef.cpp:

namespace base {
namespace vpeservice {
RegisteredGlobalObject int_64_param(getInstatnceDefenitionPlaceStr()+"int_64_param", 1);
}
namespace otherservice {
RegisteredGlobalObject int_64_param(getInstatnceDefenitionPlaceStr()+"int_64_param", 2);
}
}

我可以实现函数getInstatnceDefenitionPlaceStr()返回"base::vpeservice";对于第一个电话和"base::otherservice";第二个呢?

好了,这就是我的解决方案。希望对大家有所帮助。

我定义了一个宏每个内部命名空间,它将在命名空间内定义一个函数来获取当前的__PRETTY_FUNCTION__路径。

然后我使用了如何在c++ (gcc)中获得一个完全限定的函数名称,并进行了一些修改(您可以在宏中看到f(__PRETTY_FUNCTION__,__func__)调用:

)
#define PARAMETERS_SECTION(name) namespace name {
std::string getPath()
{
return f(__PRETTY_FUNCTION__,__func__);
}
#define configureParam(type, name, val) RegisteredGlobalObject name(getPath()+#name, val);

然后我修改了ParamsDef.cpp:

namespace base {
PARAMETERS_SECTION(vpeservice) {
configureParam(int64_t, int_64_param, 1)
}
PARAMETERS_SECTION(otherservice) {
configureParam(int64_t, int_64_param, 2)
}
}

和got keys:

基础:vpeservice: int_64_param

基础:otherservice: int_64_param

相关内容

  • 没有找到相关文章

最新更新