Mixin的名称与模板参数的参数化

丹尼斯·格拉德基(Denis Gladkiy)

是否可以在mixin模板中为函数生成名称?像这样:

mixin template Generator(string name)
{
    @property void mixin(name) pure nothrow // mixin(name) is not valid :(
    { 
            //some cool stuff here
    }
}
运行

我希望有人可以拿出更清洁的东西,但这应该可以做您想要的:

mixin template Generator(string name)
{
    mixin("alias " ~ name ~ " = _fun;");
    @property void _fun pure nothrow
    { 
        //some cool stuff here
    }
}

不幸的_fun是,这也会注入到本地名称空间中,尽管如果您使用Generator多次,则对的任何调用_fun都会被拒绝为模棱两可。如果您合法地在_fun其他地方定义了命名的函数,则可能会遇到问题

尽管您正在生成多个_funs,但通过创建的别名发出的调用Generator并不是模棱两可的,因为它们引用_fun的是特定模板实例化的作用域:

mixin Generator!"foo";
mixin Generator!"bar";

foo();  // not ambiguous, calls Generator!"foo"._fun
bar();  // not ambiguous, calls Generator!"bar"._fun
_fun(); // ambiguous, rejected by compiler

编辑:只是想抛出我有另一个疯狂的想法:

mixin template Generator(names ...) {
  @property void opDispatch(string s)() pure nothrow {
    foreach(name ; names) {
      static if (s == name) {
        // do stuff
      }
    }
  }
}

struct Foo {
  mixin Generator!("hello", "goodbye");
}

void main() {
  Foo foo;

  foo.hello;
  foo.goodbye;
}

这样可以避免产生垃圾_fun,但是确实需要您的类尚未定义opDispatch此外,它不能在同一类中多次使用(您不能从同一作用域中的不同mixin模板重载相同的方法),您必须调用一次并将所有名称作为args传递。但是,如果您希望一次性发送所有名称并且尚未定义,那么这可能是更好的选择opDispatch

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在CloudFormation模板中参数化资源名称?

来自分类Dev

参数化 id 名称

来自分类Dev

模板参数名称隐藏

来自分类Dev

模板参数的模板化模板特化

来自分类Dev

结构化模板参数

来自分类Dev

模板模板参数的部分实例化

来自分类Dev

使用模板参数实例化模板类

来自分类Dev

模板参数的模板专业化

来自分类Dev

模板模板参数的部分实例化

来自分类Dev

使用模板参数作为lambda的参数进行参数化

来自分类Dev

参数名模板的参数化模板c ++ 11

来自分类Dev

将属性名称作为参数传递给mixin LESS

来自分类Dev

将属性名称作为参数传递给mixin LESS

来自分类Dev

使用不带参数的模板名称

来自分类Dev

clang-query:检查函数参数类型的模板参数的名称

来自分类Dev

doxygen:参数/模板参数名称的垂直对齐

来自分类Dev

clang-query:检查函数参数类型的模板参数的名称

来自分类Dev

名称相同但参数类型与模板参数不同的多个函数

来自分类Dev

可变参数模板函数名称查找无法找到专业化

来自分类Dev

局部专门化中的模板模板参数中的可变参数模板参数

来自分类Dev

如何使用模板模板参数专门化类模板?

来自分类Dev

SASS 中 mixin 的参数

来自分类Dev

将用Enumeration设置为Enumeration参数化的特征中的Mixin

来自分类Dev

使用libtooling获得标准模板模板参数名称

来自分类Dev

如何将模板类的名称传递给模板参数?

来自分类Dev

可变参数模板类参数容器实例化

来自分类Dev

可变参数模板的可变参数初始化

来自分类Dev

模板参数部分专业化,参数数量不定

来自分类Dev

模板专门化中的默认参数参数