Concept好似只係強化版generic constraint?
好似做唔到我上面指既野
#[derive(Clone)]
struct Foo {
}
struct Bar {
}
struct Wrapper<T> {
pub value: T,
}
impl<T> Clone for Wrapper<T> where T : Clone {
fn clone(&self) -> Self {
return Wrapper {
value: self.value.clone()
}
}
}
fn main() {
let foo = Wrapper {
value: Foo {}
};
let bar = Wrapper {
value: Bar {}
};
foo.clone();
bar.clone(); // won't compile
}
template <typename T>
concept Clonable = requires(T a){
a.clone();
};
class A{
public:
A clone(){ return A(*this); }
};
class B{};
template <typename T>
class Wrapper{
public:
T value;
template <typename _=void> // stupid syntax hack to use concept on template member function
Wrapper<T> clone()
requires Clonable<T>
{ return (Wrapper){this->value.clone(); }
};
int main(){
Wrapper<A> wa;
wa.clone();
Wrapper<B> wb;
// wb.clone();
return 0;
}