templates - 如何从函数类型中删除属性?

标签 templates attributes d

在以下示例中,第一个测试由于函数类型属性而失败。第二个测试覆盖了这个问题,但它在语法上太重了。

import std.traits;

bool test1(T)()
{
    // clean but does not work !
    alias Fun = bool function(dchar);
    return (is(Unqual!T == Fun));    
}

bool test2(T)()
{
    // super heavy !
    return (isSomeFunction!T &&  is(ReturnType!T == bool) &&
        Parameters!T.length == 1 && is(Parameters!T[0] == dchar)
    );
}

void main(string[] args)
{
    import std.ascii: isAlpha;
    assert(test1!(typeof(&isAlpha)));
    assert(test2!(typeof(&isAlpha)));       
}

是否有办法删除属性,就像 Unqual 对存储类所做的那样?

最佳答案

看看这个:http://dlang.org/phobos/std_traits.html#SetFunctionAttributes

std.traits.SetFunctionAttributes

 alias ExternC(T) = SetFunctionAttributes!(T, "C", functionAttributes!T);

 auto assumePure(T)(T t)
     if (isFunctionPointer!T || isDelegate!T)
 {
     enum attrs = functionAttributes!T | FunctionAttribute.pure_;
     return cast(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t;
 }

该示例添加了属性pure,但类似的模式也可以删除属性。

关于templates - 如何从函数类型中删除属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312719/

相关文章:

python - 从类实例python中删除属性

d - `typeof(expr)` 的效率如何?

multithreading - 用户定义的结构不能通过 tid.send 传递

Laravel Blade 模板扩展了两种不同的布局

django - 根据值设置字段的背景颜色

C++ 绑定(bind)返回类型模板参数

c++ - 为什么这段代码不能在 g++ 中编译

c# - 如何反射(reflect)应用于枚举类型本身的自定义属性

functional-programming - D中的模式匹配

class - OOP 术语 : class, 属性、特性、字段、数据成员