这是C++的源码, 我想实现类似的功能, 用RUST如何实现? // template <typename A, typename B>
#include <iostream>
using namespace std;
class Rect{
public:
int x;
int y;
int width;
Rect(){
this->x = 10;
};
};
class Circle{
public:
int x;
int y;
int radius;
Circle(){
this->x = 10;
};
};
template <typename A, typename B>
bool collide(A const& a, B const& b) { // 支持任何形状检测碰撞; 我想实现的功能.
if(a.x == b.x){
return true;
}
return false;
}
int main() {
Circle a;
Rect b;
collide(a,b);
std::cout << "text" << collide(a,b) << std::endl;
}
1
共 10 条评论, 1 页
评论区
写评论我只是举例子, 实际场景非常复杂;
用trait 重复代码太多. 用宏似乎更好些. rust 泛型太短板;
--
👇
hubaihua
果真可以了
--
👇
坚果修补匠: 这个回复的形式是markdown文档。写代码就用```Rust 和```把代码包裹起来就行了
👇
hubaihua: 怎么调整排版啊?我写评论就是一个大大的输入框和一个发送按钮,代码不知道怎么排版
这个回复的形式是markdown文档。写代码就用```Rust 和```把代码包裹起来就行了
👇
hubaihua: 怎么调整排版啊?我写评论就是一个大大的输入框和一个发送按钮,代码不知道怎么排版
怎么调整排版啊?我写评论就是一个大大的输入框和一个发送按钮,代码不知道怎么排版
用枚举来完成
enum Shape { Rect { x: i32, y: i32, width: usize }, Circle { x: i32, y: i32, radius: usize }, }
trait Collide { fn collide(&self, other: &Self) -> bool; }
impl Collide for Shape { fn collide(&self, other: &Shape) -> bool { let l = match self { Shape::Rect { x, .. } => x, Shape::Circle { x, .. } => x, }; let r = match other { Shape::Rect { x, .. } => x, Shape::Circle { x, .. } => x, }; l == r } }
thanks; 这种接口实现好复杂;
我感觉这种模式一般是这样
然后比如你现在的检测
然后就可以
有一个缺点就是没办法通过实现一个方向来自动impl另一个方向,如果有foreign type的话有点麻烦。主要是泛型自动实现会被认为是conflict implementation,暂时没想到更好的办法
--
👇
snylonue: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3ec5ae7791c458cee4296113a516d998
写得不怎么样,仅供参考
thanks; 这种接口实现好复杂;
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3ec5ae7791c458cee4296113a516d998
写得不怎么样,仅供参考