template <pointer>获取指向</pointer>的对象类型

时间:2013-07-30 20:46:06

标签: c++ templates pointers

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

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

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:3)

你想要这样的东西:

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

这样,如果您将char*指针传递给countBitsTYPE_T会解析为char

答案 1 :(得分: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)