我有一个编程任务,提供驱动程序以及必须使用的方法标头。问题在于该方法是成员函数,而驱动程序未实例化该函数类的对象来调用该函数。
函数头:
template <class Comparable>
void mergesortImproved( vector<Comparable> &a ) { //solution here }
对mergesort的驱动程序(单独的文件)调用已改进:
mergesortImproved( items );
我们不允许提交修改后的驱动程序,因此看来这应该可行。我是否缺少某些东西,或者这只是草率的作业?
简单的答案:这是不可能的。如果没有关联的对象实例,则不能调用非静态成员函数。任何非静态函数都隐式地具有必须与之一起传递的附加参数(例如,对的调用o->f(10, 12)
被隐式转换为_f(o, 10, 12)
;;如果有兴趣,请参见调用约定)。
仍然必须通过via调用静态成员函数classname::function()
,因此,这又是一次不幸的运气。
但是:您可以将全局函数放入标头中,这将实例化对象并调用对象成员函数:
*。H:
class X
{
template <class Comparable>
void mergesortImproved( vector<Comparable> &a )
{
/* ... */
}
}
template <class Comparable>
void mergesortImproved( vector<Comparable> &a )
{
X x;
x.mergesortImproved(a);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句