vpp*_*rof 1 c++ types typeof sizeof typeid
我想在c ++中编写一个宏,它将值0赋给表的每个元素.例如,声明i如此:int i[10];,宏fill_with_zeros(i)将产生这种效果:
i[0] = 0;
i[1] = 0; 等等.
这是它的代码:
#define fill_with_zeros(xyz) \
for(int l = 0 ; l < sizeof(xyz) / sizeof(int) ; l++) \
xyz[l] = 0;
Run Code Online (Sandbox Code Playgroud)
问题是我希望它能够处理多种类型的表:char,int,double等.为此,我需要一个能够确定类型的函数xyz,以便sizeof(int)我可以使用类似的东西sizeof(typeof(xyz)).
存在类似的线程,但人们通常想要打印类型名称,而我需要在sizeof()中使用该名称.有什么办法吗?
提前致谢
为什么你认为你需要一个宏?这应该工作:
// Beware, brain-compiled code ahead!
template< typename T, std::size_t sz >
inline void init(T (&array)[sz])
{
std::fill( array, array+sz, T() );
}
Run Code Online (Sandbox Code Playgroud)
如果允许的话,我希望我的std lib实现能够优化std::fill()自己调用std::memset()(或类似的东西)T.
请注意,这实际上并不将元素归零,而是使用默认构造的对象进行初始化.对于可以归零的所有类型,这实现了相同的效果,并且可以使用许多不能归零的类型.