Rustで汎用パラメータ型のインスタンスを作成することはできますか?Rustで汎用関数の引数を使用して新しい変数を作成できますか?
実際の関数本体に型を作成するためにテンプレート型を使用するのが完全に有効なC++バックグラウンドから来ています。
この関数では、タイプT
の変数を作成しようとしていますが、その方法はわかりません。
私はちょうど、タイプT
のオブジェクトを作成し、それをロードし、その後、HashMap
に挿入できるようにしたい:ここ
fn load<T>(&mut self, id: String, path: String)
where T: AssetTrait + 'static
{
// let asset : T = T; this doesn't work?
asset.load(path);
// self.assets.insert(id, Box::new<T>(asset));
}
はすべて私のコードです:では
trait AssetTrait {
fn load(&self, path: String) {
// Do nothing
// Implement this in child asset object
}
}
struct AssetManager {
assets: HashMap<String, Box<AssetTrait + 'static>>,
}
impl AssetManager {
fn new() -> AssetManager {
let asset_manager = AssetManager { assets: HashMap::new() };
return asset_manager;
}
fn load<T>(&mut self, id: String, path: String)
where T: AssetTrait + 'static
{
// let asset : T = T; this doesn't work?
asset.load(path);
// self.assets.insert(id, Box::new<T>(asset));
}
}
、私はそれが動作するようになったが、私は「資産」を変更しなければなりませんでした変数は、第2の例では、ロード関数が正しく機能するように変更可能である。 – John
それは理にかなっています、 'load'は' self'を変更します。 – malbarbo
細かい注記:implブロックでdecodeされたすべてのfnは、関連付けられたfnです。私たちは自己、メソッドを取る人のためのより具体的な名前を持っていますが、メソッドは関連する関数です。 –