我做了一个两元素Vector结构,我想重载+运算符.
我使我的所有函数和方法都采用引用而不是值,我希望+运算符以相同的方式工作.
impl Add for Vector {
fn add(&self, other: &Vector) -> Vector {
Vector {
x: self.x + other.x,
y: self.y + other.y,
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据我尝试的变化,我要么遇到生命问题,要么输入不匹配.具体来说,这个&self论点似乎没有被视为正确的类型.
我已经看到了模板参数的例子上impl,以及Add,但他们只是导致不同的错误.
我发现如何为不同的RHS类型和返回值重载运算符?但即使我把一个use std::ops::Mul;放在顶部,答案中的代码也不起作用.
我正在使用rustc 1.0.0-nightly(ed530d7a3 2015-01-16 22:41:16 +0000)
我不接受"你只有两个字段,为什么要使用参考"作为答案; 如果我想要一个100元素结构怎么办?我会接受一个答案,证明即使有一个大的结构我也应该通过值传递,如果是这样的话(我认为不是这样).我有兴趣知道结构大小的一个好的经验法则并且通过值vs struct传递,但这不是当前的问题.
我有一个自定义控件,包含一个带文本的填充圆角矩形.(实际控件更复杂,但此处显示的代码具有相同的症状.)我将控件的实例附加到Panel,并使该Panel成为另一个Panel的子级,其AutoScroll = true.我认为这对于正确的滚动行为是足够的,但是如果你滚动使得我的控件的左侧应该离开面板的左侧,它会粘住并且控件会缩小.与滚动相同,控件应在顶部关闭.(底部和右部似乎不是问题.)以下是示例代码(需要对System.Windows.Forms和System.Drawing的引用.)我在Windows上使用Visual Studio 2010和.NET 4客户端.
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace CustomControlScrollTest
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
// Form with a Dock = Fill panel with autoscroll turned on, and a nested panel
// with few custom roundRectControls.
public class Form1 : Form
{
Panel autoScrollPanel;
Panel rectPanel;
public Form1()
{
Size = new Size(300, 200);
autoScrollPanel = new Panel();
autoScrollPanel.Dock = DockStyle.Fill;
autoScrollPanel.AutoScroll = …Run Code Online (Sandbox Code Playgroud) 我正在使用类似于此问题的接受答案的代码来制作自定义光标.我想我可以问,"当我完成自定义光标后我该怎么办?" 但具体来说,我的问题分为两部分:
一:我看到使用反射来设置光标的"ownHandle"字段的代码.是否这样可以在放置Cursor对象时销毁(本机)句柄?如果不是它做什么?
二:我是否必须手动处理光标对象或者为控件分配新光标,导致控件为我配置光标?例如:
private void customCursorButton_Clicked(object sender, EventArgs e)
{
this.Cursor = NativeMethods.LoadCustomCursor(@"c:\windows\cursors\aero_busy.ani");
}
private void defaultCursorButton_Clicked(object sender, EventArgs e)
{
var tmp = this.Cursor; // do I have to do this
this.Cursor = Cursors.Default;
tmp.Dispose(); // and this?
}
Run Code Online (Sandbox Code Playgroud)