C ++テンプレートをObjective-Cメソッドのパラメーターとして使用するにはどうすればよいですか?基本的に私はこのようなことをしたいです:
template<typename T>
- (void)method:(T)arg
しかし、それは機能しません。このドキュメントによると、これは可能ですが、例は提供されていません。誰かがこれを行う方法を知っていますか?
C ++テンプレートをObjective-Cメソッドのパラメーターとして使用するにはどうすればよいですか?基本的に私はこのようなことをしたいです:
template<typename T>
- (void)method:(T)arg
しかし、それは機能しません。このドキュメントによると、これは可能ですが、例は提供されていません。誰かがこれを行う方法を知っていますか?
いいえ、それはできません。
Objective-Cのクラス、プロトコル、およびカテゴリは、C ++テンプレート内で宣言することはできません。また、C ++テンプレートを、Objective-Cインターフェイス、プロトコル、またはカテゴリのスコープ内で宣言することもできません。
そのテンプレートを宣言することは可能ですが、Objective-Cメソッドは型によってオーバーロードできないため、役に立ちません。
ドキュメントに「C++テンプレートパラメータはObjective-Cメッセージ式のレシーバーまたはパラメーターとしても使用できます(セレクターとしてではありません) 」と記載されている場合、テンプレート化されたC++クラスまたは関数内からObjective-Cメソッドを呼び出すことができることを意味します。テンプレート化されたObjective-Cメソッドを実際に作成できるわけではありません。
例えば:
template<typename T>
void f(id obj, T t) {
[obj doSomethingWithObject:t];
}
...動作するはずです(私はそれをテストしていませんが)。もちろん、呼び出し時に使用される型はf
、パラメーターとして有効に渡されるものdoSomethingWithObject:
でなければなりません。そうでない場合、呼び出し元のコードはコンパイルされません。