C++ 11では、参照型/ rvalueセマンティクスとcv修飾子を削除して、値型にジェネリック型を壊すことができます。C + 11のようなタイプの腐敗の腐食
decay<int>::type // type is `int`
decay<const int&>::type // type is `int`
decay<int&&>::type // type is `int`
参照修飾子、寿命とmut
修飾子を取り除きルーストに同じことを達成するための公知の機構は、ありますか?例えば:
decay<u32>::type <--- type is `u32`
decay<&u32>::type <--- type is `u32`
decay<&mut u32>::type <--- type is `u32`
decay<&static u32>::type <--- type is `u32`
背景については、私はマクロで一致した関数の引数の束の値を格納するstruct
を生成するマクロを記述しようとしています。例えば、マクロは引数foo: i32, bar: &Vec<String>
が含まれている場合があり、得られた構造体は次のようになります。
struct GeneratedStruct {
foo: i32,
bar: Vec<String>,
}
私はRustでは、これは特性を使用するのではなく、マクロによって直接処理されると思います。 Rustマクロはテキストではなく抽象構文木で動作することを覚えておいてください。実際にはマクロ内の引数を解析する*ことができます。 –
Derefは&TをTに変えることができますが、私が間違っていなければ、Tがそれ自身ではないことを知る方法はありません。 @MatthieuM。 –
マクロが助けてくれるとは思わない。 'タイプI32Ref =& '静的なi32; ...; decay!(I32Ref) 'は' i32'を生成するはずですが、これが語彙レベルで知られている方法はありません。 – kennytm