精华内容
下载资源
问答
  • 都知道Unity的生命周期有一些函数:Awake、Start、Update等等。 Unity 是如何调用的呢? 在这里进行猜想: 1.虚函数的重载 ...继承 MonoBehavior 之后,Unity都会统计内部的函数,执行一次遍历反射回调。 ...

    都知道Unity的生命周期有一些函数:Awake、Start、Update等等。
    Unity 是如何调用的呢?

    在这里进行猜想:

    1.虚函数的重载
    但是没有 override关键字。

    2.反射
    mono支持对函数名进行字符串获取,获取到这些函数名之后,进行反射调用。
    也就是说
    继承 MonoBehavior 类之后,Unity都会统计内部的函数,执行一次遍历反射回调。

    展开全文
  • c++写了一个test.dll,...怎么调用某个下面的函数 我用的dllimport,入口点entrypoint怎么写? 没有对应的,是用户自己建立的class,下面一堆的函数,比如a::func1,b::func2之的 问题就在于,不知道entrypoi...

    c++写了一个test.dll,内部有几个类分别是class A class B class C
    类A,B,C下面分别有一些函数func1,func2,func3.....
    怎么调用某个类下面的函数
    我用的dllimport,入口点entrypoint怎么写?

    没有对应的,是用户自己建立的class,下面一堆的函数,比如a::func1,b::func2之类的
    问题就在于,不知道entrypoint填什么好,我使用dependency工具去查这dll内部的函数,都是一堆问号开头的比如?a@func1@!@#$%这类的函数名,直接拷贝了填是可以但是会提示内存出错,怀疑是函数调用入口问题
    不知道这类带有class的函数要怎么调用,以前用过都是直接import dll然后entrypoint写函数名就可以了,但是现在因为dll里面的函数都在每个类下面,就不知道entrypoint写啥好了

    c++/cli最好的解决办法

    吧这个类导出来,加上类的头文件,就可以使用 啊

    C++需要导出的API,用extern "C"包起来,按C的方法编译的方法名称不会带上参数信息.
    关于怎么在托管代码中写非托管方法的声明,建议多了解一点PInovke的知识.
    需要示例可以参考:Pinvoke.Net

    C++函数导出基本上都是用基础类型。很少用到类的。

    原因是不同的编译器,对类的具体实现可以不同。由于布局的不同,C#并不能理解C++的类,甚至同是C++编译器,都会存在兼容的问题l。

    在C#中调用C++类,不是说完全不可能,却是代价很高。不容易调试,不容易维护,得不偿失。最可行的做法是,只用
    小蜜蜂论坛顶帖机基础类型来导出C函数(这也是大部分Win32 API的做法)。

    展开全文
  • classA(): def b(self): b1=123 def c(self): c1=b1+5 print c1 请问大神怎么才能调用b1,编译时总是说b1没定义
  • 大神说:如果类内还有一个bar的非静态成员函数,那么getInstance去访问bar的话,会出错,原因是编译器在访问bar时,会需要提供一个this指针(相当于编译器认为this->bar),因此,此时调用会出错。 然而调用类的...
    1. 问题起源
      在这里插入图片描述

    2. 我觉得很困惑,于是一顿操作,证明了确实类的静态成员函数不能调用类的非静态成员函数
      在这里插入图片描述
      即如果_data是非静态成员变量的话,编译不通过。

    3. 请教了下组内大神 疑问点:类的成员函数不也是类的非静态成员函数嘛?怎么getInstance能访问呢?
      大神说:如果类内还有一个bar的非静态成员函数,那么getInstance去访问bar的话,会出错,原因是编译器在访问bar时,会需要提供一个this指针(相当于编译器认为this->bar),因此,此时调用会出错。
      然而调用类的构造函数时,new Singleton 不需要提供一个this指针,因此类的静态成员函数可以调用构造函数,而在new完会产生一个this的指针,此时去调用bar是没有问题的(总结看来:如果类的构造函数不声明为private的话,那么相当于全局可见的,和main没什么差别)

    4. 升华
      大神说:其实把getInstance作为一个友元函数也可以实现单例!(太强了,以前都没有考虑过。)不过考虑到类的封装,一般还是用static的成员函数

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201812/14/1544788405_744691.png)![图片说明]... 怎么在定义的函数内调用类中的函数,在不用静态成员的情况下
  • 从windows上移植的代码,其中时钟控制部分需要改成NSTimer,但是NSTimer的创建时参数self和selector都不能用C++class函数来创建,这个问题怎么解决?做跨平台的应该都遇到过类似的self和selector参数的问题
  • 我们要做的是:将一个add函数作为另一个process函数的参数, 并在process函数调用add;这个我们分别在全局函数中实现和在中实现,看看两者有什么区别。 函数指针 先联想下,什么是函数指针和什么时候我们需要用到...

    我们要做的是:将一个add函数作为另一个process函数的参数, 并在process函数里调用add;这个我们分别在全局函数中实现和在类中实现,看看两者有什么区别。

    函数指针

    先联想下,什么是函数指针和什么时候我们需要用到函数指针?
    我的第一反应,函数指针,就是指向函数的指针,类比int* p //p是指向int的指针,那么函数指针 它的类型是什么,它应该怎么定义;
    这时候我们想想什么时候用到函数指针,我的第一反应两个地方:
    a. dll 动态库加载的时候 b. 回调函数的时候

    函数指针 它的类型是什么,它应该怎么定义? 带着这个问题,先回顾下dll 动态库加载的时候,我们怎么用的?

    假设一个动态库dll, 里面封装了一个方法add,我们需要再另一个函数里调用它

    // add.dll
    extern "C" _declspec(dllexport) int __stdcall add(int a, int b)
    {
        return a+b;
    }
    
    // 另一个进程 main.exe
    // 需要定义一个函数指针
    typedef int (*ADDPROC)(int a, int b);
    // ADDPROC相当于函数指针的类型 类比int* p; ADDPROC相当于int*
    ADDPROC addproc; // 定义一个函数指针变量
    // 需要加载dll,这里采用动态加载
    HINSTANCE hDll = LoadLibary("add.dll");
    if(nullptr != hDll)
    {
        addproc = (ADDPROC)GetProcAddress(hDll, "add");
    }
    else
    {
        // 加载dll失败
        ...
    }
    

    上面是一个加载dll的简单示例,我们发现,动态加载dll,在获取一个函数地址的时候,我们用到了函数指针
    ADDPROC它是一个类型,代表着这是一个add函数类型的指针类型,int*, 用它可以定义一个变量,ADDPROC addproc;
    这里参考https://www.cnblogs.com/AnnieKim/archive/2011/11/20/2255813.html,给出函数指针的定义赋值的总结
    1) 函数指针的初始化。

    //函数如下:
    int CompareString(const string& str1, const string& str2)
    {
       return str1.compare(str2);  
    }
    

    函数指针的初始化有两种方式:

    第一种,也是最普遍的方式:

    int (*CompareFunction)(const string&, const string&) = CompareString;
    

    第二种,是使用typedef定义函数类型,这种写法有助于对代码的理解:

    typedef int (*CompareFunctionType)(const string&, const string&);
    CompareFunctionType CompareFunction = CompareString;
    

    2) 函数指针赋值。
    函数名可以理解为该类型函数的指针。当然,取地址操作符作用于函数名上也能产生指向该类型函数的指针。也就是说下面两种赋值都是可行的:

    CompareFunctionType CompareFunction = CompareString;
    CompareFunctionType CompareFunction = &CompareString;
    

    在全局函数中使用函数指针

    已经知道函数指针定义和初始化,那么我们想要在全局函数中;将add函数作为参数传递给process函数,如下

    int add(int a, int b)
    {
        return a+b;
    }
    typedef int (*ADDPROC)(int a, int b);
    // ADDPROC addproc
    int process(ADDPROC addproc, int a, int b)
    {
        addproc(a,b); // 直接调用add函数
    }
    
    int main()
    {
        ADDPROC addproc = add; // 定义一个add指针类型的变量,并赋值为add函数的地址,也可以写成ADDPROC addproc = &add
        int res = addproc(2,1); // res=3 可以通过定义好的函数指针来访问函数 
        res = process(addproc, 1, 4); //res = 5  也可以把函数指针当成参数传入 
        res = process(add, 5, 4);  // res=9 这里也可以直接传add这个函数名进去 
        return 0;
    }
    

    这里我们就已经完成了全局函数里,将函数作为变量传递给另一个函数;
    那如果放在类中,应该怎么做呢?

    在类中使用函数指针

    这里实现的的,类内需要用到函数指针,调用类的成员函数add,这种类内使用函数指针,则add函数(函数指针指向的函数)应该为静态成员函数
    我们先把这种全局函数版的直接搬到类里,看看会报什么错

    class Solution {
    public:
        // 非静态函数
        int add(int a, int b)
        {
            return a+b;
        }
        typedef int (*ADDPROC)(int a, int b);// 声明一个函数指针类型
        int process(ADDPROC addproc, int a, int b)
        {
            return addproc(a,b); // 直接调用add函数
        }
        // 类里调用
        int test()
        {
            //error: reference to non-static member function must be called
            process(Solution::add, 3, 4);
            return 0;
        }
    };
    
    int main()
    {
        Solution sol;
        //error: reference to non-static member function must be called
        sol.process(sol.add, 3, 4); // 类外调用
        return 0;
    }
    

    测试后发现,无论是类里面调用还是类外调用,编译都会报错;报错信息,跟静态成员函数相关;
    我们把add函数挪到类外作为全局函数,或者把add声明成静态成员函数,则可以通过编译;为什么?
    这是因为非静态的成员函数还多了一个隐式this指针参数(implicit parameter)
    int add(Solution* this, int a, int b) // 普通成员函数的全部形参
    这时,把add函数放在类外或者加上static声明,则没有问题;
    说明静态成员函数和类实例没有关系,所有的类是共享的同一个static成员函数;
    修改后的代码如下:

    typedef int (*ADDPROC)(int a, int b); // 函数指针类型定义写在类里类外都可以
    
    class Solution {
    public:
        // 非静态函数版
        static int add(int a, int b)
        {
            return a+b;
        }
    
        int process(ADDPROC addproc, int a, int b)
        {
            return addproc(a,b); // 直接调用add函数
        }
    
        ADDPROC _addproc;
    };
    
    int main()
    {
        ADDPROC addproc = &Solution::add;
        Solution sol;
        int res = sol.process(sol.add, 3, 4); // 直接通过函数名当参数
        res = sol.process(addproc, 3, 4); // 通过局部变量函数指针当参数
        res = addproc(2,4); // 相当于调用sol.add(2,4)
        res = (*addproc)(7,8); // 严格遵守指针解引用到函数的方式,相当于调用sol.add(7,8)
    
        // 类的成员变量 函数指针
        sol._addproc = &sol.add; //  也可以写成这样:sol._addproc = sol.add;
        res = sol._addproc(1, 2);
        return 0;
    }
    

    这个链接里,是类外声明的函数指针类型,然后函数指针是全局的;函数指针指向类的静态成员函数和非静态成员函数都是可以的;本质上还是类外使用函数指针;
    https://www.cnblogs.com/AnnieKim/archive/2011/12/04/2275589.html

    展开全文
  • <p>template<class Entry> class A {<!-- --> protected:  struct Node {   Entry entry; ...如果不把Node结构体定义移到外面,有办法解决吗?</p>
  • 不管是什么编程语言,... 那么问题来了,我们知道在Javascript中,有一类函数叫做匿名函数,没有名称,怎么调用呢?当然你可以说,可以把匿名函数赋值给一个常量: const factorial = function(n){ if (n <= 1) {
  • C++中,定义一个中的成员分为私有成员、受保护成员和公有成员,我们知道,这些私有成员和受保护的成员是无法通过对象直接访问的,而是要通过调用公有成员函数从而间接的访问这些私有成员,那假如我的程序中出现...
  • Java匿名内部函数本人不怎么主动使用,但是经常会调用一些API,其中会调用一些接口,而这些接口是需要使用匿名内部来实现的,于是就遇到了一些问题。 就比如okHttp3 的接口调用 OkHttpClient okHttpClient = ...
  • 相关文章 ...当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本中非静态成员,有点...
  • python内置了很多内置函数方法属性及各种模块。当我们想要当我们想要了解某种类型有哪些属性方法以及每种方法该怎么使用时,我们鼓励使用dir()函数、help()函数或网上搜索来研究各类的方法。dir()函数不带参数时...
  • 所谓工厂函数就是指这些函数都是对象(实际上是), 当你调用它们时,实际上是创建了一个实例。 type():查看类型 转载于:https://www.cnblogs.com/hixiaowei/p/9083822.html...
  • 不要跟我讲自己调用自己这样的话,我一分也不给你的, 我要知道的是,系统是不是一定会建一个栈区,或者说为什么一定要建栈,系统是怎么来实现的,或者说系统是根据什么来建栈,他(系统)怎么会知道我那个就是递归...
  • 前阵子被问及一个在C中如何调用C++函数的问题,当时简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。...
  • 那就不使用this,使用函数类的局部全局变量达到私有变量的效果, 代码改变如下 :[code="javascript"] var a = (function(){ var pParam; //添加私有变量 ... init: function (...) { ... pParam=this....
  • 文章目录资源管理形参初始化顺序传引用和传递值的区别?对象切割问题?当派生传递给以下函数时发生什么?...1.传值:对于,会调用拷贝构造函数。 2.传引用:不会调用构造函数。 对于内置类型、st
  • ``` #include using namespace std; class StaticMemberTest{ ...如果是这样,为什么18行的addUp调用会导致undefined ...2.如果main函数为空的话,上面的类内初始化是没有问题的,我应该怎么在类外使用sci变量呢?
  • 非const成员函数,可以被常量对象调用吗?const成员函数的const修饰什么?成员函数内部要通过this->访问成员吗?成员函数返回一个对象本身怎么写?返回拷贝(一个新对象)怎么写?this是什么?成员函数和非成员...
  • Python中的函数基础

    2018-11-20 19:48:24
    一、认识函数 不使用函数的问题: 1、同样的功能,相同的代码需要重复写很多次; 2、当功能发生改变了,需要修改多...Python已经声明好了,程序员直接调用函数,如:print函数、input函数、max函数、min函数等等 ...
  • Java学习之函数

    2020-07-31 20:29:51
    函数/方法 什么是方法:方法的本质就是行为(3w1h,who,where,why,how) 位置:在的内部与main函数并列。 哪里使用方法:方法必声明在(文件)中,方法可以在方法...函数调用函数名();只要在代码中出.
  • 做—件事情,找一个能解决这个事情的对象,调用对象的方法完成函数式编程思想: 只要能获取到想要的结果,谁去做的怎么做的都不重要,重视的是结果不重视过程 2. Lambda表达式引入 为什么要使用Lambda表达式? ...
  • 为了在模板实例创建时自动调用此静态内部的构造函数,销毁时自动调用此静态内部的析构函数 }; template <typename T> T* Singleton<T>::m_pInstance = NULL; // 这句编译通过 template <typename T> ...
  • 学习三部曲1、什么是函数 函数就是具备某一功能的工具 函数的使用必须遵循先定义、后调用的原则 事先准备工具的过程即函数的定义 拿来就用即函数调用 函数分为两大: 内置的函数 自定义函数2、为何要用函数 2.1 ...
  • C++多态       多态与虚函数表 ...虚析构函数 ...纯虚函数 ...【问题】构造函数或析构函数内部不能调用纯虚函数 (注意不是虚函数) 【问题】inline能不能... 【问题】派生的析构函数无法调用 ?? 怎么处理    ...
  • (在没有讲解前,先自己梳理一下,Outer这个外部里的函数想要访问内部,也必须创建内部的对象) 编译运行的结果,我猜测是5。DOS结果显示,我们猜测没有错。 如果,我们想要输出的num是4,该怎么修改。我的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447
精华内容 178
关键字:

怎么调用类内函数