我正在编写一个命名空间,需要内部的某些函数才能访问特定的变量(也在命名空间中声明)。通常,当我这样做时,我在.cpp文件中声明了变量,以防止外部访问它。
·H
namespace Example
{
int myFunc();
}
的.cpp
namespace Example
{
int hiddenVar;
int myFunc()
{
.. do something with hiddenVar
return someValue;
}
}
我的问题是我需要定义一个需要访问这个隐藏变量的模板函数。不幸的是,由于必须在头文件中定义模板函数的主体,因此它无法访问隐藏在.cpp中的变量。
·H
namespace Example
{
template< typename T >
void myFunc( const T& myT )
{
.. do something with hiddenVar // doesnt know what hiddenVar is
}
}
的.cpp
namespace Example
{
int hiddenVar;
}
是否有一个隐藏在命名空间内的变量,同时在标题访问中给出一个模板函数?
答案 0 :(得分:1)
·H:
namespace Example
{
int * get_hiddenVar();
template< typename T >
void myFunc( const T& myT )
{
int * hiddenVarPtr = get_hiddenVar();
.. do something with *hiddenVarPtr
}
}
的.cpp
namespace Example
{
int hiddenVar=0;
int * get_hiddenVar()
{
return &hiddenVar;
}
}
答案 1 :(得分:0)
您无法直接执行此操作,但可以使用某项功能。由于hiddenVar
不依赖于模板参数,因此您可以执行以下操作:
·H
namespace Example
{
void Function(); // Use the right function prototype here, of course,
// as long as it does not depend on T
template<typename T>
void myFunc(const T& myT)
{
//...
Function();
//...
}
}
的.cpp
namespace Example
{
int hiddenVar;
void Function()
{
// Do something with hiddenVar
}
}
如果您使用hiddenVar
取决于T
,当然,您运气不佳。
答案 2 :(得分:0)
将它放在名为“详细信息”的嵌套命名空间中,然后不要担心。
使用命名空间和私有等隐藏变量不是安全构造,而是为了更好的代码。