- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为微 Controller 开发一种玩具语言,我有一个函数类,它有 11 个虚方法,称为“调用”,从无参数到 10 个参数都采用基对象类并返回对象类(函数还扩展目的)。每当我的语言中有函数定义时,我都会定义一个类来扩展 Function 类并根据其参数实现其中一个虚拟方法。每当我想调用一个函数时,我只是将它转换为 Function* 并使用它的参数调用它的调用方法。所以我得到了类似下面的东西,
class object {}
//other types that extend object
class Function : public object{
virtual object* call(){}
virtual object* call(Object* a){}
//....
}
//
// then during code generation I define
//
class s243 : public Function{
Object* call(){
//do somthig
}
}
Now AFAIK for each class that extends function there will be a virtual function table, and each instance will have a pointer to that table, microcontroller I am doing this for only has 2kb of memory and I am going to have 50 60 functions at least to do basic stuff, so I am looking for ways to avoid using virtual functions. base class also defines a single virtual function that takes a deep copy of itself which is used by containers to copy the object without casting it to a particular type.
EDIT: I have code space lots I can trade code space for ram. As for function pointers, a function object can hold pointers to its state,
(define make-adder
(lambda (n)
(lambda (x) (+ x n))))
来自 90 分钟方案编译器的示例,我可以将指针传递给 n,因此无论何时它返回一个函数,它都知道 n 是什么。
最佳答案
您的方法存在一个问题,即基类提供了一个约定,暗示每个可能的函数签名对每个可能的函数都有效。 “函数”的用户不知道哪个签名对给定的函数实例有效。他们有吗
virtual object* call()
或
virtual object* call(Object* a)
至少使用函数指针或 boost::function,您可以指定预期的签名:
void object* (*funcPtr)(Object*);
boost::function< object* (Object*) > boostFunc;
如果你想无论如何都可以调用任何函数,你可以使用boost::bind将任何函数转换为上面签名的函数。然后,您可以轻松地将这些函数存储在一个容器中,并按照您的意愿使用它们。
由于对函数的所有调用都没有执行任何操作,因此您还会在实现过程中浪费周期。由于涉及运行时多态性,编译器可能无法对此进行优化。
关于c++ - 不使用虚函数的多态行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780022/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!