我有一个场景,我正在尝试创建一个可以在Array上运行的通用C ++类(跨平台)。这个C ++类可以在OS之间移植,以便它可以利用本机Array支持。
例如,它在Mac OS / iOS上运行时使用NSArray,在Windows中运行MFC数组类。我的目标是使这个数组管理类具有通用性。
#ifndef __MixTest__ArrayUser__
#define __MixTest__ArrayUser__
#if defined _MAC_OS
typedef void * ARRAY_HANDLE;
//#elif defined _WINDOWS
#endif
class ArrayUser
{
public:
ArrayUser() { }
virtual ~ArrayUser() { }
void assignArray(ARRAY_HANDLE handle)
{
m_array_handle = handle;
}
void UseArray();
private:
ARRAY_HANDLE m_array_handle;
};
#endif /* defined(__MixTest__ArrayUser__) */
// ArrayUser.cpp
// MixTest
#include "ArrayUser.h"
#import <Cocoa/Cocoa.h>
void ArrayUser::UseArray()
{
NSArray *array = (__bridge NSArray *) m_array_handle;
for (NSString *str in array)
{
NSLog(@"Array - %@",str);
}
}
现在我的目标是在Mac OS上运行它,我在我的准系统Mac OS项目中执行以下操作
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (strong) NSArray *arrayItems;
@end
实施
#import "AppDelegate.h"
#include "ArrayUser.h"
@interface AppDelegate ()
{
ArrayUser arrayUser;
}
@end
@implementation AppDelegate
-(id) init
{
if([super init] !=nil)
{
_arrayItems = @[@"Planes",@"Trains",@"Automobiles"];
arrayUser.assignArray((__bridge ARRAY_HANDLE)_arrayItems);
arrayUser.UseArray();
}
return self;
}
问题
此转移是否合适?
arrayUser.assignArray((__ bridge ARRAY_HANDLE)_arrayItems);
期望_arrayItems很强大,预计将通过AppDelegate进行控制。