在没有实例化对象的情况下访问非静态成员函数?

tu

我有一个编程任务,提供驱动程序以及必须使用的方法标头。问题在于该方法是成员函数,而驱动程序未实例化该函数类的对象来调用该函数。

函数头:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在没有对象参数的情况下调用非静态成员函数,C ++节点

在没有对象参数的情况下调用非静态成员函数会发生错误

C++:如何在没有模板参数的情况下访问模板化类的静态成员

实例化一个非静态类以在没有继承的情况下跨其他类使用

有没有办法在不创建对象实例的情况下访问类中的函数(VB)?

为什么我们不能在没有公共成员函数的情况下访问类外部的私有静态成员?

有默认情况下静态的成员函数吗?

在没有实例的情况下访问“实例”?

这个非静态方法的工作(据说在没有对象的情况下被调用?)

在没有默认ctor的情况下初始化在类类型的#define中定义的大小的非静态成员数组

在没有实例的情况下访问Kotlin代表类型

是否可以在没有= new Obj()的情况下实例化新对象?

我可以在没有方法的情况下实例化对象吗?

在没有默认构造函数的情况下实例化头文件中声明的变量

在没有公共构造函数的情况下实例化.NET类

在没有“新”的情况下实例化课程

如何在没有构造函数的情况下为对象实例化设置断点?

如何确保在没有构造函数的情况下正确初始化对象?

谷物:在没有默认构造函数的情况下反序列化对象向量

没有构造函数的情况下,对象初始化如何发生?

如何:在没有适当的默认构造函数的情况下复制类的实例;有没有默认构造函数的成员?

如何在不实例化任何对象的情况下访问实例方法?

为什么没有完整名称空间的情况下无法从字符串实例化新对象

PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

有没有办法在不使它成为静态mut的情况下初始化一个非平凡的静态std :: collections :: HashMap?

Laravel-如何在不实例化对象的情况下调用静态函数

如何在没有访问类类型的情况下获取类成员

没有Moq的情况下如何在C#中实例化FormFile的实例?

为什么我可以在没有 getter 方法的情况下访问私有实例变量?