2

C++ でデータベース クエリからのいくつかの型の取得をサポートしたい場合は、次のようなテンプレートに基づいてメソッド定義を作成できます。

template<typename T>
T getDBValue(int col){
    throw "not implemented";
}

template<>
int getDBValue<int>(int col){
    return 43;
}

template<>
char* getDBValue<char*>(int col){
    return "foo";
}

Objective-C には実際に対応するテンプレートがないことはわかっています。したがって、このように実装するのではなく、いくつかの戻り値をサポートするために何を使用しますか?

- (type1) getType1FromCol: (int) col;
- (type2) getType2FromCol: (int) col;
- (type3) getType3FromCol: (int) col;

前もって感謝します!

4

2 に答える 2

2

ユーザーにとってより便利な方法に応じて、実際には2つのオプションしかありません。

  • あなたが提案したように、さまざまなメソッドにさまざまな名前を付けてください
  • アイテムに適した型を返すメソッドを 1 つだけ使用します (基本的に、すべての単一型メソッドを 1 つにマージし、NSObject* や id などのジェネリック型を返します)。明らかに「実際の」オブジェクトの戻り値の型に対してのみ機能し、基本的に呼び出し元が正しい結果の型を知るか、結果からクエリする必要があります
于 2012-08-29T07:54:59.050 に答える
2

言語を混在させたい場合、または特定のタスクにより適した言語が見つかった場合は、いつでも Objective-C++ を使用できます。通常、ファイル拡張子を に変更して、ObjC++ としてコンパイルします.mm

ObjC インターフェイスの場合、既存のプログラムを使用する次のような単純なラッパー インターフェイスを検討できます。

template<typename T>
T getDBValue(int col); // << not defined

template<>
int getDBValue<int>(int col){
    return 43;
}

template<>
const char* getDBValue<const char*>(int col){
    return "foo";
}

次のようにアプローチできます。

@implementation MONDBEntry
{
    int col;
}
...

- (int)intValue
{
    return getDBValue<int>(self.col);
}

- (NSString *)stringValue
{
    return [NSString stringWithUTF8String:getDBValue<const char*>(self.col)];
}
...
于 2012-08-29T08:01:54.710 に答える