C++ 模板参数是否可以是运行时已知的对象类型?
假设我有一个类C++ 模板参数是否可以是运行时已知的对象类型?,c++,oop,templates,inheritance,C++,Oop,Templates,Inheritance,假设我有一个类Grid,包含3种不同的正方形,每种正方形都有不同的功能,所有这些都继承自父类Square。我想创建一个这样的模板,其中T1是当前正方形(我的角色所在的正方形)的任何类型。它可以是网格中的任何正方形,但只有在调用函数时才知道 template void Grid::move(T1 current_square,T2 new_square){…}否,必须在编译时解析模板类型。你会想把它们都变成正方形,但是你需要一些方法让对象告诉你它是什么样的正方形。是的,据我所知,没有函数返回多态对
Grid
,包含3种不同的正方形,每种正方形都有不同的功能,所有这些都继承自父类Square
。我想创建一个这样的模板,其中T1是当前正方形(我的角色所在的正方形)的任何类型。它可以是网格中的任何正方形,但只有在调用函数时才知道
template void Grid::move(T1 current_square,T2 new_square){…}
否,必须在编译时解析模板类型。你会想把它们都变成正方形,但是你需要一些方法让对象告诉你它是什么样的正方形。是的,据我所知,没有函数返回多态对象的类型。我可以使用动态强制转换来执行3个if语句,看看它是什么样的正方形,但这似乎是一个不可靠的代码。如果我有20种正方形而不是3种呢?这就是虚拟函数的用途。为什么要创建模板?对你有什么好处?这感觉就像是一种情况,您可以对每种类型的正方形进行专门化,也可以简单地使用square&
参数。无论哪种情况,模板都不是适合作业的工具。在保持抽象的同时,你能更详细地说明这个函数的用途吗(没有太多的实现细节)?@JaMiT我对它做了更多的工作,事实上,模板不会有帮助。本质上,我希望我的函数访问一个只属于3个方块中的2个方块的成员(因此它不在父类中)。如果我只使用Square&
它会给我一个Square没有名为..
的成员的错误。我想我将实现一个虚拟函数,它将从2个方块中返回我想要的成员,而在第3个方块上什么也不做,尽管我希望有一个更优雅的解决方案。