2

C ++テンプレートをObjective-Cメソッドのパラメーターとして使用するにはどうすればよいですか?基本的に私はこのようなことをしたいです:

template<typename T> 
- (void)method:(T)arg

しかし、それは機能しません。このドキュメントによると、これは可能ですが、例は提供されていません。誰かがこれを行う方法を知っていますか?

4

2 に答える 2

5

いいえ、それはできません。

Objective-Cのクラス、プロトコル、およびカテゴリは、C ++テンプレート内で宣言することはできません。また、C ++テンプレートを、Objective-Cインターフェイス、プロトコル、またはカテゴリのスコープ内で宣言することもできません。

そのテンプレートを宣言することは可能ですが、Objective-Cメソッドは型によってオーバーロードできないため、役に立ちません。

于 2010-08-07T06:32:24.840 に答える
2

ドキュメントに「C++テンプレートパラメータはObjective-Cメッセージ式のレシーバーまたはパラメーターとしても使用できます(セレクターとしてではありません) 」と記載されている場合、テンプレート化されたC++クラスまたは関数内からObjective-Cメソッドを呼び出すことができることを意味します。テンプレート化されたObjective-Cメソッドを実際に作成できるわけではありません。

例えば:

template<typename T>
void f(id obj, T t) {
    [obj doSomethingWithObject:t];
}

...動作するはずです(私はそれをテストしていませんが)。もちろん、呼び出し時に使用される型はf、パラメーターとして有効に渡されるものdoSomethingWithObject:でなければなりません。そうでない場合、呼び出し元のコードはコンパイルされません。

于 2010-08-07T06:37:07.187 に答える