次の記事を読みました
http://studentguru.gr/b/kron/archive/2012/09/26/c-template-metaprogramming-and-f-type-providers.aspx
これは、F#タイププロバイダーを使用してコンパイル時のフィボナッチ数列を生成する方法を示しています。解決策は記事にありますが、最終的なプログラムは
> cat .\fib.fs
type fib = Playground.StaticFibonacci<100000>
printfn "Fibonacci(100000) has %d digits" fib.Value.Length
> fsc .\fib.fs -o fib.exe -r:.\FibonacciTypeProvider.dll –nologo
> .\fib.exe
Fibonacci(100000) has 20899 digits
これは非常に強力に見えます。INPC(INotifyPropertyChanged)のタイププロバイダーを作成して、代わりに
open System.ComponentModel
type MyObject() =
let mutable propval = 0.0
let propertyChanged = Event<_, _>()
interface INotifyPropertyChanged with
[<clievent>]
member x.PropertyChanged = propertyChanged.Publish
member this.MyProperty
with get() = propval
and set(v) =
propval <- v
propertyChanged.Trigger(this, new PropertyChangedEventArgs("MyProperty"))
あなたは書くことができるかもしれません
open System.ComponentModel
type MyObject() =
let mutable propval = 0.0
let propertyChanged = Event<_, _>()
interface INotifyPropertyChanged with
[<clievent>]
member x.PropertyChanged = propertyChanged.Publish
member this.MyProperty : INPCTypeProvider<double>
ですから、私が半日を無駄にする前に、おそらくもっと情報に通じた誰かが私が私の時間を無駄にしていると私に言うかもしれません、そしてこのレベルのメタプログラミングはただ不可能です。