這個問題煩了了我1個小時。

1fn parse_path_operation(
2        &mut self,
3        path: &str,
4        op: Option<Box<impl FnOnce(&mut Self) + ?Sized>>,
5    ) -> Result<bool, anyhow::Error>
6
7self.parse_path_operation(path, None::<Box<dyn FnOnce(&mut IDir)>>)?;

這裡記錄一下這個簽名的正確用法。

下次學乖了,這種編譯器大小未知的trait類型一定要用Box或者其他的智能指針包起來,我想寫成這樣的簽名完全不行,雖然被調用方的簽名能通過編譯,但是調用方的簽名始終有問題,網上找了半天,還是得用智能指針管用…

1Option<impl FnOnce(&mut Self) + ?Sized>