小编JMC*_*125的帖子

我可以通过引用传递参数的函数/方法和在C++中通过值传递的重载吗?

在C#中,这肯定是可能的,因为这个可编译的例子可以显示:

static void Teste(int x) { }
static void Teste(ref int x) { }
static void Teste()
{
    int i = 0;
    Teste(i);
    Teste(ref i);
}
Run Code Online (Sandbox Code Playgroud)


但是可以使用构造函数在C++(/ CLI)中完成吗?请参阅以下示例:

class Foo
{
    Foo(int bar)
    {
        // initializing "Foo" instance...
    }
    Foo(int &bar)
    {
        // initializing "Foo" instance...
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

虽然这个类确实使用这些构造函数进行编译,但是当我应用另一个时,我无法看到如何选择,也就是说,调用是ambiguos,因为在C#中没有为此目的知道的关键字"ref".我在构造函数中尝试了它,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否不能这样做).

顺便说一句,我用谷歌搜索,只有"通过参考和价值之间有什么区别?" 但没有像这样覆盖超载.而且我想作为变通方法,我可以使用指针,这要归功于"取地址"(&); 或者,如上所述,还有一个额外无用的参数.但我想知道的是:我可以像这样重载(通过ref/by value)吗?

提前致谢,

c# c++ c++-cli pass-by-reference pass-by-value

5
推荐指数
1
解决办法
663
查看次数

在F#中使用Windows窗体绘图

我试图System.Windows.Forms.Form在F#中绘制非自定义(我的意思是,只是创建默认表单类的实例,而不是我可以创建的派生类的实例).

我创建了一个自定义表单,但我不需要也不想要一个新的复杂结构,所以我删除了它,它简化了代码; 这么多,它停止显示图像.

问题必须出在我创建的函数中,即在另一个F#项目中.我已经创建它(函数conect)来按照它们提供的顺序连接点,不同的是System.Drawing.Graphics.DrawLines,它以某些其他顺序在点之间绘制线条为什么还没有注意到(可能是从右到左,从上到下,因为点是表示).

Programa.fs相关代码片段:

let pen = new Pen(brush = Brushes.Black, width = 1.0f)
let original =            
    ([|new PointF(50.0f, 50.0f); new PointF(100.0f, 50.0f)|])

use form1 = new Form(Width = 400, Height = 400, Text = "Fractais (Teste - Windows Forms)")

form1.Paint.Add(
    fun e -> // (1)
        original
        |> List.ofArray        
        |> Base.applyFractal 1uy Base.fractalFunc1
        |> Base.conect e.Graphics pen)
Run Code Online (Sandbox Code Playgroud)

如果在lambda表达式而不是写入的内容中e.Graphics.DrawLines(pen, original),它将在列表中的点之间绘制一条简单的线.

以下是整个解决方案中Basework中的故障排除方法:

let conect (gr:Graphics) (pen:Pen) (points:PointF list) =
    let rec …
Run Code Online (Sandbox Code Playgroud)

f# drawing winforms

3
推荐指数
1
解决办法
1801
查看次数

观看窗口不适用于F#

前段时间我注意到VS2012 for Web中的"Watch"窗口不适用于FSharp中的默认功能.例如,cos someValue不起作用,也没有在函数的开头插入let _cos = cos或使用的解决方法.该错误类似于"当前上下文中不存在cos"或"_cos在当前范围内无效"等.let _cos x = cos x_cos(someValue)

我应该更改某些设置还是这是一个意外的错误?当然,我可以声明我需要观察的所有结果,但这有点开销,这是非常不切实际的.我该怎么做才能解决这个问题?

f# visual-studio-2012

0
推荐指数
1
解决办法
380
查看次数