- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面是我理解的静态多态性的一个非常简单的例子。我不使用动态多态性的原因是我不想阻碍 op
中 PROCESSOR
函数的内联。
template <class PROCESSOR>
void op(PROCESSOR* proc){
proc->doSomething(5);
proc->doSomethingElse();
}
int main() {
ProcessorY py;
op<ProcessorY>(&py);
return 0;
}
这个例子的问题是:没有明确定义 PROCESSOR
必须定义什么函数。如果缺少一个,你只会得到一个编译错误。我认为这是不好的风格。
它还有一个非常实际的缺点:IDE 的在线帮助当然不能向您显示该对象上可用的功能。
定义PROCESSOR
的公共(public)接口(interface)的好的/官方方法是什么?
最佳答案
There exists no explicit definition of what methods a PROCESSOR has to define. If one is missing, you will just get a compile error. I think, this is bad style.
是的。它不是。可能是。这取决于。
是的,如果你想以这种方式定义行为,你可能还想限制模板参数应该有的内容。不幸的是,现在不可能“明确地”执行此操作。
你要的是constraints and concepts功能,它应该作为 C++ 11 的一部分出现,但被推迟了,并且从 C++ 14 开始仍然不可用。
然而,获取编译时错误通常是限制模板参数的最佳方式。例如,我们可以使用 std
库:
1) 迭代器。
C++ 库 defines几种类型的迭代器:forward_iterator
、random_access_iterator
等。对于每种类型,都定义了一组属性和有效表达式,保证可用。如果您使用迭代器,它与容器中的 random_access_iterator
不完全兼容,需要 random_access_iterator
,您将在某些时候遇到编译器错误(最有可能的是,当使用解引用运算符时( []), 在此迭代器类中是必需的)。
2) 分配器。
std
库中的所有容器都使用分配器来执行内存分配/释放和对象构造。默认情况下,std::allocator用来。如果你想用你自己的交换它,你需要确保它拥有 std::allocator
保证拥有的一切。否则,您将遇到编译时错误。
因此,在我们获得概念之前,这是最好且使用最广泛的解决方案。
关于c++ - 静态多态性 : How to define the interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29876983/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!