Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板参数是否可以是运行时已知的对象类型?_C++_Oop_Templates_Inheritance - Fatal编程技术网

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个方块上什么也不做,尽管我希望有一个更优雅的解决方案。