我想创建一个通用的数组函数。在我的 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/