我正在尝试编写一个通用函数来计算数组中的位。我正在尝试使用模板来定义函数。
template <typename TYPE_T>
size_t countBits (TYPE_T testeeA, const size_t sizeA)
{
size_t count = 0;
for (size_t item = 0; item < sizeA; item++)
{
for (TYPE_T bit = 1; bit != 0; bit += bit)
{
if ((testeeA[item] & bit) == bit) count++;
}
}
return (count);
}
但 TYPE_T 为char
时,我需要第二个 TYPE_T 为char*
。
我在模板参数中尝试typename TYPE_T *
,但VS2012 C ++禁止使用。
我可以在preprocesser宏中写这个:
#define COUNTBITS(TYPE_T) \
size_t countBits (TYPE_T * testeeA, const size_t sizeA) \
{ size_t count = 0; \
for (size_t item = 0; item < sizeA; item++) \
{ for (TYPE_T bit = 1; bit != 0; bit += bit) \
. . .
有什么建议吗?
由于
答案 0 :(得分:3)
你想要这样的东西:
template <typename TYPE_T>
size_t countBits (const TYPE_T* testeeA, const size_t sizeA) {...}
这样,如果您将char*
指针传递给countBits
,TYPE_T
会解析为char
。
答案 1 :(得分:1)
我能想到的两个选择:
使模板参数成为指针:
template <typename TYPE_T>
std::size_t countBits(TYPE_T* testeeA, ...);
使用std::remove_pointer
:
for (typename std::remove_pointer<TYPE_T>::type bit = 1; bit != 0; bit += bit)