函数中的c++模板

标签 c++ templates

我想创建一个通用的数组函数。在我的 API 中,我有一个通用容器,我需要将其转换为正确的类,但我想让它通用

template<class T>
void UT::printArray(CCArray* arr, T type)
{
    CCObject *aIt = NULL;  
    CCARRAY_FOREACH(arr,aIt )
    {
        T *aElm = static_cast<T*>(aIt );
        int col = aElm ->getColNum(); 
        int row = aElm ->getRowNum();
        CCLOG("col:%d row:%d",col,row);
    }
}

这编译不正确,而且我每次调用这个函数时都需要创建新的 T 对象。正确的方法是什么?

最佳答案

当然我不知道你的CCArray是,但我可以修改你的功能:

template<class T>
void UT::printArray(CCArray* arr)
{
    CCObject *aIt = NULL;  
    CCARRAY_FOREACH(arr,aIt )
    {
        T *aElm = static_cast<T*>(aIt );
        int col = aElm ->getColNum(); 
        int row = aElm ->getRowNum();
        CCLOG("col:%d row:%d",col,row);
    }
}

我已经删除了你的第二个 T type争论。您将调用它作为 printArray<myType>(arr)明确而不是 T从您的(未使用的)参数推断出。

正如有人在评论中所说,您最好的解决方案是阅读有关迭代器的信息,并使您的 CCArray返回适当的 begin()end()然后您可以对您的容器使用许多标准算法(例如 sort)。

关于函数中的c++模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18584252/

相关文章:

templates - 如何使用 underscore.js 输出 JSON 对象?

数字类型的 C++ 非零默认值 - 重新发明?

c++ - 使用 gtkmm3 的套接字服务器

c++ - cv::SimpleBlobDetector detect() 在 Visual Studio 2010 中产生访问冲突异常

c++ - (C++) 为什么 '||' 逻辑运算符返回 1?

c++ - 同一地址的变量如何产生 2 个不同的值?

c++ - 名称、论文、书籍未在此范围内声明非成员函数 C++

c++ - 有没有在模板中使用数值的有效方法?

c++ - 确定参数类型

c++ - 为枚举参数化的模板