函数中的c++模板

c++ template in function

本文关键字:模板 c++ 函数      更新时间:2023-10-16

我想制作一个通用的Array函数。在我的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)。