voile.attr
UDA
- template
getParameterUDAs
(alias Func, size_t i)
templategetParameterUDAs
(alias Func, size_t i, alias attr) - 関数のパラメータに付与されたUDAを取り出す。Parameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr UDAの種類を指定できます(指定しないとすべて返します) Returns: UDAのタプルが返りますExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @(Test) long y, int z, S s) => x; alias uda1 = getParameterUDAs!(lambda, 0); static assert(uda1.length == 1); static assert(uda1[0] == 10); alias uda2 = getParameterUDAs!(lambda, 1); static assert(uda2.length == 2); static assert(uda2[0] == 15); static assert(is(uda2[1] == Test)); alias uda3 = getParameterUDAs!(lambda, 2); static assert(uda3.length == 0); alias uda4 = getParameterUDAs!(lambda, 3); static assert(uda4.length == 1); static assert(uda4[0] == 30); static assert(getParameterUDAs!(lambda, 0, int).length == 1); static assert(getParameterUDAs!(lambda, 0, Test).length == 0); static assert(getParameterUDAs!(lambda, 1, Test).length == 1);
- template
getParameterTypeUDAs
(alias Func, size_t i)
templategetParameterTypeUDAs
(alias Func, size_t i, alias attr) - 関数のパラメータに付与されたUDAのうち、型についたUDAを取り出す。Parameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr UDAの種類を指定できます(指定しないとすべて返します) Returns: UDAのタプルが返りますExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @(Test) long y, int z, S s) => x; alias uda1 = getParameterTypeUDAs!(lambda, 0); static assert(uda1.length == 0); alias uda2 = getParameterTypeUDAs!(lambda, 1); static assert(uda2.length == 0); alias uda3 = getParameterTypeUDAs!(lambda, 2); static assert(uda3.length == 0); alias uda4 = getParameterTypeUDAs!(lambda, 3); static assert(uda4.length == 1); static assert(uda4[0] == 30);
- template
getParameterArgUDAs
(alias Func, size_t i)
templategetParameterArgUDAs
(alias Func, size_t i, alias attr) - 関数のパラメータに付与されたUDAのうち、引数についたUDAを取り出す。Parameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr UDAの種類を指定できます(指定しないとすべて返します) Returns: UDAのタプルが返りますExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @(Test) long y, int z, S s) => x; alias uda1 = getParameterArgUDAs!(lambda, 0); static assert(uda1.length == 1); static assert(uda1[0] == 10); alias uda2 = getParameterArgUDAs!(lambda, 1); static assert(uda2.length == 2); static assert(uda2[0] == 15); static assert(is(uda2[1] == Test)); alias uda3 = getParameterArgUDAs!(lambda, 2); static assert(uda3.length == 0); alias uda4 = getParameterArgUDAs!(lambda, 3); static assert(uda4.length == 0); static assert(getParameterUDAs!(lambda, 0, int).length == 1); static assert(getParameterUDAs!(lambda, 0, Test).length == 0); static assert(getParameterUDAs!(lambda, 1, Test).length == 1);
- enum bool
hasParameterUDA
(alias Func, size_t i, alias attr); - 関数のパラメータにUDAが付与されているか確認しますParameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr チェックするUDA Returns: UDAがあったらtrueExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @Test long y, int z, S s) => x; static assert( hasParameterUDA!(lambda, 0, 10)); static assert(!hasParameterUDA!(lambda, 0, 15)); static assert( hasParameterUDA!(lambda, 1, 15)); static assert( hasParameterUDA!(lambda, 1, Test)); static assert(!hasParameterUDA!(lambda, 2, 15)); static assert( hasParameterUDA!(lambda, 3, 30));
- enum bool
hasParameterTypeUDA
(alias Func, size_t i, alias attr); - 関数のパラメータに付与されたUDAのうち、型にUDAがついているか確認しますParameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr チェックするUDA Returns: UDAがあったらtrueExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @Test long y, int z, S s) => x; static assert(!hasParameterTypeUDA!(lambda, 0, 10)); static assert(!hasParameterTypeUDA!(lambda, 0, 15)); static assert(!hasParameterTypeUDA!(lambda, 1, 15)); static assert(!hasParameterTypeUDA!(lambda, 1, Test)); static assert(!hasParameterTypeUDA!(lambda, 2, 15)); static assert( hasParameterTypeUDA!(lambda, 3, 30));
- enum bool
hasParameterArgUDA
(alias Func, size_t i, alias attr); - 関数のパラメータに付与されたUDAのうち、引数にUDAがついているか確認しますParameters:
Func 関数 i 引数の番号(最初の引数は0番目) attr チェックするUDA Returns: UDAがあったらtrueExamples:@(30) struct S {} enum Test; alias lambda = (@(10) int x, @(15) @Test long y, int z, S s) => x; static assert( hasParameterArgUDA!(lambda, 0, 10)); static assert(!hasParameterArgUDA!(lambda, 0, 15)); static assert( hasParameterArgUDA!(lambda, 1, 15)); static assert( hasParameterArgUDA!(lambda, 1, Test)); static assert(!hasParameterArgUDA!(lambda, 2, 15)); static assert(!hasParameterArgUDA!(lambda, 3, 30));
- enum Ignore
ignore
; - Attribute marking
ignore
data - enum bool
hasIgnore
(alias value); - Examples:
struct A { int test; @ignore int foo; } struct B { int test; } A a; B b; static assert(!hasIgnore!(a.test)); static assert(!hasIgnore!(b.test)); static assert( hasIgnore!(a.foo));
- template
ignoreIf
(alias func) - Attribute marking conditional ignore data
- enum bool
isIgnoreIf
(alias uda); - enum bool
hasIgnoreIf
(alias symbol); - template
getPredIgnoreIf
(alias value) - enum Essential
essential
; - Attribute marking
essential
field - enum bool
hasEssential
(alias value); - Examples:
struct A { int test; @essential int foo; } struct B { int test; } A a; B b; static assert(!hasEssential!(a.test)); static assert(!hasEssential!(b.test)); static assert( hasEssential!(a.foo));
- enum Key
key
; - Attribute marking essential field
- enum bool
hasKey
(alias value); - enum bool
isKeyMember
(T, string member); - template
getKeyMemberNames
(T) - enum bool
hasKeyMember
(T); - enum string
getKeyMemberName
(T); - Examples:
struct A { int test; @key int foo; } struct B { int test; } A a; B b; static assert(!hasKey!(a.test)); static assert(!hasKey!(b.test)); static assert( hasKey!(a.foo)); static assert( hasKeyMember!A); static assert(!hasKeyMember!B); static assert(getKeyMemberNames!A == AliasSeq!("foo")); static assert(getKeyMemberName!A == "foo");
- pure nothrow @nogc @safe Name
name
(stringname
);
enum Namename
(string n); - Attribute forcing field
name
- enum bool
hasName
(alias value); - template
getName
(alias value) if (hasName!value) - Examples:
struct A { int test; @name("test") int foo; } struct B { @name!"foo" int test; } A a; B b; static assert(!hasName!(a.test)); static assert( hasName!(a.foo)); static assert( hasName!(b.test)); static assert(getName!(a.foo) == "test"); static assert(getName!(b.test) == "foo");
- pure nothrow @nogc @safe Value!T
value
(T)(T val);
enum Value!(typeof(v))value
(alias v); - Attribute forcing field
value
- template
hasValue
(args...) - template
getValues
(args...) - template
getValue
(alias value) if (hasValue!value) - Examples:
struct A { int test; @value("test") int foo; } struct B { @value!1 int test; } A a; B b; static assert(!hasValue!(a.test)); static assert( hasValue!(a.foo)); static assert( hasValue!(b.test)); static assert( hasValue!(b.test, int)); static assert(getValue!(a.foo) == "test"); static assert(getValue!(b.test) == 1);
- struct
ConvBy
(alias T); - alias
convBy
= ConvBy(alias T); - template
isConvByAttr
(alias Attr) - template
getConvByAttr
(alias Attr) if (isConvByAttr!Attr) - template
ProxyList
(alias value) - template
getConvBy
(alias value) - enum bool
hasConvBy
(alias value); - template
canConvTo
(alias value, T) - template
convTo
(alias value, Dst) if (canConvTo!(value, Dst)) - template
getConvFromStyle
(alias value, Src) if (hasConvBy!value) - template
canConvFrom
(alias value, T) - template
convFrom
(alias value, Src) if (canConvFrom!(value, Src)) - template
convertTo
(alias value) - template
convertFrom
(alias value) - enum auto
isConvertible
(alias value, T);