2

我正在尝试编写一个通用函数来计算数组中的位。我正在尝试使用模板来定义功能。

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_TTYPE_T为.charchar*

我尝试typename TYPE_T *模板参数,但 VS2012 C++ 失败了。

我可以在预处理器宏中写这个:

#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) \
. . .

有什么建议么?

谢谢

4

2 回答 2

3

你想要这样的东西:

template <typename TYPE_T>
size_t countBits (const TYPE_T* testeeA, const size_t sizeA) {...}

这样,如果您将char*指针传递给countBits,则TYPE_T解析为char

于 2013-07-30T20:49:03.663 回答
1

我能想到的两个选择:

  1. 使模板参数成为指针:

    template <typename TYPE_T>
    std::size_t countBits(TYPE_T* testeeA, ...);
    
  2. 使用std::remove_pointer

    for (typename std::remove_pointer<TYPE_T>::type bit = 1; bit != 0; bit += bit)
    
于 2013-07-30T20:51:04.477 回答