函数中的c++模板
c++ template in function
我想制作一个通用的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
)。
相关文章:
- .cpp和.h文件中的模板专用化声明
- C++模板来检查友元函数的存在
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何在c++中为模板函数实例创建快捷方式
- 使用C++中的模板和运算符重载执行矩阵运算
- 有人能分解一下这个c++模板的语法吗
- 如何在c++17中制作一个模板包装器/装饰器
- 模板化建造师专业化
- 调用专用模板时出错"no matching function for call to [...]"
- 模板元程序查找相似的连续类型名称
- 如何在C++20中创建模板别名的推导指南
- 没有名称的C++模板参数
- 具有重复类型的C++可变模板
- 如何将enable-if与模板参数和参数包一起使用
- 没有用于初始化C++中的变量模板的匹配构造函数