我想做以下事情:
template <typename T>
struct foo
{
template <typename S>
friend struct foo<S>;
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
但我的编译器(VC8)扼杀了它:
error C3857: 'foo<T>': multiple template parameter lists are not allowed
Run Code Online (Sandbox Code Playgroud)
我想有所有可能的实例template struct foo
朋友foo<T>
所有T
.
我该如何工作?
编辑:这个
template <typename T>
struct foo
{
template <typename>
friend struct foo;
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
似乎编译,但它是否正确?朋友和模板的语法非常不自然.
我正在实现UICollectionViewDelegateFlowLayout
的collectionView:layout: sizeForItemAtIndexPath:(NSIndexPath*)indexPath
方法,并计算新的单元格大小,我必须访问默认的.
我的问题是:如何从我的代码中访问storyboard中定义的默认单元格大小?
所以,我基本上想问的是下面的代码是否安全(不管它是否有效,因为它确实如此).即,公共getter是否会覆盖actionLog属性的合成getter [属于不同类型]?
.h文件:
@interface SomeClass : NSObject
- (NSArray*) actionLog;
@end
Run Code Online (Sandbox Code Playgroud)
.m文件:
@interface SomeClass ()
@property (strong, nonatomic) NSMutableArray* actionLog;
@end
@implementation SomeClass
...
@end
Run Code Online (Sandbox Code Playgroud) 当我从Objective-C代码尝试使用下面的Menu类时,我只能访问foobar(或参数列表中没有Selector类型的任何其他函数),而addItemWithName函数不可用(我有检查自动生成的swift到objective-c文件,该功能未在菜单界面中列出.我怎样才能做到这一点?
public class Menu : UIView {
public func foobar() {
// implementation
}
public func addItemWithName(itemName: String, target: AnyObject?, action: Selector?) {
// implementation
}
}
Run Code Online (Sandbox Code Playgroud) objective-c ×3
c++ ×1
friend ×1
immutability ×1
mutable ×1
properties ×1
selector ×1
swift ×1
templates ×1