0

我想做一个通用的数组函数。在我的 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 对象。什么是正确的方法?

4

1 回答 1

2

当然我不知道你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对您的容器使用许多标准算法(例如)。

于 2013-09-03T05:12:00.210 回答