在创建模板函数时,每个模板都是其自己的独立版本。因此,静态变量仅对调用它的函数而言是静态的。
有什么有效的方法可以解决此问题,同时仍将数据保留给该函数私有,特别是对于标头/内联函数中的函数而言?
我正在按照这些思路考虑,但是那时它对文件是私有的:
namespace
{
unsigned char none;
}
template< typename t > unsigned char foo( )
{
return none;
}
答案 0 :(得分:3)
您可以使用以下策略:
类似的东西:
unsigned char foo_impl()
{
static unsigned char none = <some initializer>;
return none;
}
template< typename t > unsigned char foo( )
{
return foo_impl();
}
如果需要封装其实现,则可以在源文件而不是头文件中实现foo_impl
。
答案 1 :(得分:0)
在C ++ 17中,我建议使用inline
变量,因此您可以将其保留在标题中并避免重复的符号:
inline class cfoo_internal {
unsigned char none /* = initialize */;
template< typename t > friend unsigned char foo();
} foo_internal;
template< typename t > unsigned char foo( )
{
return foo_internal.none;
}