小编Jul*_*les的帖子

将Qt绑定到LLVM

创建Qt绑定到位于LLVM之上的语言的最佳方法是什么?

尝试解析Qt头文件并从中生成到C的接口,从LLVM调用C接口?或者也许尝试让SWIG接口Qt?或者,还有更好的方法?

binding qt llvm

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

维护一组最小的子集

以下是我想对以集合为元素的假设集合数据结构执行的操作:

  1. 将一个集合插入到数据结构中,但是:(1) 如果新集合是任何现有集合的超集,则不要添加它 (2) 如果新集合是任何现有集合的子集,则删除它们。
  2. 枚举当前集合中的所有集合

所有有问题的集合都是已知有限集合的子集,比如 {0..10^4}。

有没有办法有效地做到这一点?

algorithm set subset data-structures

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

了解多提示分隔连续的API

用于多提示分隔连续的API 在OCaml,Abstractly and Concretely System Description中的Delimited Control中描述.

我的问题涉及到的类型push_subcont : ('a,'b) subcont -> (unit -> 'a) -> 'b.为什么这种类型不('a,'b) subcont -> 'a -> 'b?此外,为什么有一个单独的子类型:为什么不简单('a,'b) subcont = 'a -> 'b?我几乎可以肯定这是有充分理由的,因为Oleg让事情变得尽可能优雅(但不是更优雅).

谢谢!

ocaml functional-programming delimited-continuations

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

什么时候代码共享CLR中的泛型的不同实例?

如果您有方法或类型Foo<T>,那么CLR可以为不同的T编译多个版本.我知道所有引用类型共享相同的版本.它对结构有什么作用?对于不同的结构,代码有时是共享的,还是从不共享的?例如,我可以想象代码是为所有相同大小的结构共享的.

我很感兴趣,因为我想知道以下示例:

interface IBar 
{
   void DoBar();
}

struct Baz : IBar 
{
   public void DoBar(){ ... }
}

struct Quux : IBar 
{
   public void DoBar(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我执行以下操作:

public void ExecuteBar<T>(T bar) where T:IBar
{
   bar.DoBar();
}

ExecuteBar(new Baz());
ExecuteBar(new Quux());
Run Code Online (Sandbox Code Playgroud)

这是否会产生两个版本ExecuteBar,每一个直接(非虚拟的)直接打电话到Bar.DoBar()和Quux.DoBar()?或者是在运行时完成调度?

c# generics clr value-type

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

关于SAT的学习材料(布尔可满足性问题)

在SAT(布尔可满足性问题)求解器上阅读哪些好文档.我无法通过Google找到好的资料.我发现的文件要么是鸟瞰图,要么太高级或损坏的PDF文件......

您建议哪些论文/文档了解现代实用SAT求解器中的算法?

computer-science sat-solvers

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

F#upcasting TextBlock到UIElement

出什么问题了:

let (x:UIElement) = upcast new TextBlock()
Run Code Online (Sandbox Code Playgroud)

错误是:此处需要类型为"System.ComponentModel.ISupportInitialize"且不可用.您必须添加对程序集'System,Version = 4.0.0 ....'的引用.

TextBlock 是UIElement ... 的子类型

请注意,执行错误消息所说明的内容确实可以解决问题,但为什么有必要做一些基本的转发?

.net f# uielement

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

如何创建包含具有公共超类的对象的F#列表?

我有两个功能,水平和垂直,用于布局控件.他们的工作方式如下:

let verticalList = vertical [new TextBlock(Text = "one"); 
                             new TextBlock(Text = "two"); 
                             new TextBlock(Text = "three")]
Run Code Online (Sandbox Code Playgroud)

现在verticalList是一个垂直显示三个文本块的控件:

one
two
three
Run Code Online (Sandbox Code Playgroud)

以下是定义:

let horizontal controls = 
    let wrap = new WrapPanel() in
    List.iter (wrap.Children.Add >> ignore) controls ;
    wrap

let vertical controls = 
    let stack = new StackPanel() in
    List.iter (stack.Children.Add >> ignore) controls ;
    stack
Run Code Online (Sandbox Code Playgroud)

当我组合不同类型时会出现问题:

let foo = vertical [new TextBlock(Text = "Title"); vertical items]
Run Code Online (Sandbox Code Playgroud)

这抱怨列表中的元素不是同一类型.这是事实,但他们有一个共同的超类型(UIElement).

我知道我可以使用:> UIElement来覆盖列表中的两个项目,但这是一个丑陋的解决方案.F#可以推断出常见的超类型.如果没有,为什么不呢?

如果看起来很漂亮会很棒的

vertical [X; Y; Z]
Run Code Online (Sandbox Code Playgroud)

不必成为

vertical [(X :> UIElement); …
Run Code Online (Sandbox Code Playgroud)

wpf f# types list supertype

2
推荐指数
1
解决办法
2316
查看次数

如何在F#中使用其他方法创建接口

我正在尝试创建一个在IEvent之上需要其他方法的接口,如下所示:

type Varying<'t> = 
    abstract member Get : unit -> 't
    abstract member Set : 't -> unit
    abstract member AddHandler : Handler<'t> -> unit
    abstract member RemoveHandler : Handler<'t> -> unit
    member v.Add(f) = v.AddHandler(new Handler<_>(fun _ x -> f x))
    interface IEvent<'t> with
        member c.AddHandler(h) = c.AddHandler(h)
        member c.RemoveHandler(h) = c.RemoveHandler(h)
        member c.Add(f) = c.Add(f)
Run Code Online (Sandbox Code Playgroud)

我添加了Get&Set方法.问题是F#编译器要我实现抽象成员:

没有给出'抽象成员Varying.AddHandler:Handler <'t> - > unit'的实现

但这种类型的观点是该成员是抽象的.我究竟做错了什么?

.net f# interface typing

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

具有仅适用于某些类型参数的方法的泛型类

假设您正在编写库以在屏幕上显示内容,因此您可以创建一个IDisplayable界面.该接口有一种方法可以从对象创建控件:displayable.GetControl().

您想要创建自己的列表类型,可以显示:MyList<T>.现在这个列表只能T是一个IDisplayable,所以你可以在MyList类中询问T应该实现IDisplayable.但是当T不是IDisplayable时,你也想在某些地方使用这个列表类型(结果这个列表不可显示).那么可以说如果T实现了IDisplayable,MyList会实现IDisplayable吗?我也很高兴如果MyList<T>总是实现IDisplayable但是如果你尝试调用,GetControl()如果T不是IDisplayable,则会在运行时抛出异常,但我想知道是否有一种静态类型安全的方法来执行它.可以这样做吗?或者我在寻找错误的解决方案?

编辑:

我同意到目前为止MyList可能有太多责任的建议.我最初的想法是创造一个MyDisplayableList<T> : MyList<T> (where T : IDisplayable).

这种方法的问题是我有很多方法采用MyList并返回MyList(例如Linq中的Select方法).因此,如果我在MyDisplayableList上使用select,我会返回一个MyList,即使它是MyList,我也无法显示它...是否有一种类型安全的方法来处理C#中的这个问题?

c# generics types interface

0
推荐指数
2
解决办法
995
查看次数