我有一个编程任务,提供驱动程序以及必须使用的方法头。问题是该方法是一个成员函数,并且驱动程序不会实例化函数类的对象来调用该函数。
功能标题:
template <class Comparable>
void mergesortImproved( vector<Comparable> &a ) { //solution here }
驱动程序(单独文件)调用mergesortImproved:
mergesortImproved( items );
我们不允许提交修改过的驱动程序,因此看起来这应该可行。我错过了什么,或者这只是一个草率的任务?
答案 0 :(得分:1)
简单回答:这是不可能的。如果没有关联的对象实例,则无法调用非静态成员函数。任何非静态函数都隐含地具有必须传递的附加参数(例如,对o->f(10, 12)
的调用被隐含地转换为类似_f(o, 10, 12)
的内容;如果感兴趣,请查看calling conventions)
静态成员函数仍然必须通过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);
}