ベクトルとインデックスをメッシュに格納するための頂点属性配列を作成しようとしています。頂点属性はvector2、vector3、vector4から構成できることを理解しているので、特定のタイプのオブジェクトを返すようにメソッドを制約することなく、それらすべてに対応するクラスを作成したいと思います。テストとして、私は以下を利用して次のクラスを作成しましたNSMutableData
:
//VertexAttributeArray.h
@interface VertexAttributeArray : NSObject
{
NSMutableData *vertexData;
}
- (void *)data;
- (CGRect *)rect;
//VertexAttributeArray.m
- (id)init
{
self = [super init];
if(self)
{
vertexData = [[NSMutableData alloc] initWithLength:0];
}
return self;
}
- (void *)data
{
return [vertexData mutableBytes];
}
- (CGRect *)rect
{
return [vertexData mutableBytes];
}
- (void)dealloc
{
if(vertexData)
{
[vertexData release];
vertexData = nil;
}
[super dealloc];
}
メッシュクラス内から、次のようなものを呼び出すことができるようにしたいと思います。
VertexAttributeArray *vertexAttributeArray = [[VertexAttributeArray alloc] init];
[vertexAttributeArray data][0] = CGRectMake(0.0, 0.0, 0.0, 0.0); //doesn't work - compiler error
[vertexAttributeArray rect][0] = CGRectMake(0.0, 0.0, 0.0, 0.0); //works fine
最初のメソッドアクセスdata
が推奨されます。これは、クラスが特定のタイプの構造体で動作するように制約しないためですが、Xcodeは「不完全なタイプ'void'は割り当てできません」という警告をスローするだけです。
さまざまなタイプのデータ構造に対して複数のメソッドを使用したくありませんが、現在、これを回避する方法がわかりません。さまざまな型へのポインターを返すメソッドがあると、あまりエレガントに見えず、多くの痕跡の未使用(および不要な)コードが追加されます。
これを回避して、アグノスティックなデータストアを作成する方法はありますか?メッシュクラスにはVertexAttributeArray
、頂点、インデックス、法線、色などを格納するためのさまざまなオブジェクトが必要なので、vector2、vector3、vector4を格納するのが理想的です。これを達成するにはどうすればよいですか?