struct Bar {
enum { Special = 4 };
};
template<class T, int K> struct Foo {};
template<class T> struct Foo<T,T::Special> {};
Run Code Online (Sandbox Code Playgroud)
用法:
Foo<Bar> aa;
Run Code Online (Sandbox Code Playgroud)
无法使用gcc编译4.1.2它抱怨使用T::SpecialFoo的部分特性.如果Special是一个类,解决方案将是前面的类型名称.枚举(或整数)是否有相当于它的东西?
我想实现一个可移动的UIView类(当你触摸它并移动手指时视图移动),例如:
@interface MovableView : UIView {
some members;
}
-touchesBegan;
-touchesMoved;
@end
Run Code Online (Sandbox Code Playgroud)
如何在没有多重继承的情况下将此代码应用于UILabel,UIButton等?在C++中,我会这样做(使用UIView作为MovableView的虚拟基础):
struct MovableLabel : UILabel, MovableView {};
Run Code Online (Sandbox Code Playgroud)
提供类别作为多继承的替代,但我绝对不希望使用类别扩展UIView,因为这将适用于我的应用程序中的所有视图.我只希望我的一些观点可以移动.
我目前避免代码重复的策略是将MovableView代码放在头文件中,并在每次需要某个类来使用它时包含它.除此之外,我必须将MovableView的成员添加到我正在编写的任何类中.这是纯粹的代码丑陋,但比我的项目中的复制/粘贴代码更好.
有没有人有任何其他想法来解决这个[没有多重继承]的Objective C限制?
谢谢,
俺答