条件使用D中模板化方法中的局部变量

pau*_*ens 5 templates d

我不确定我是否使用了正确的术语,但我正在努力做出类似这样的事情:

struct test_t {
  int x;
  void test()() if(x == 10) {
    printf("X is ten!\n");
  };
  void test()() {
    printf("X is not ten!\n");
  };
};

test_t test;
test.x = 10;
test.test(); // output: X is ten!
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?我不会在现实代码中使用它,我只是想知道语言是否支持这样的东西.

Ada*_*ppe 7

你不能用运行时值来做,因为模板都是在编译时计算出来的.您可以使用编译时值执行此操作:

struct test_t(int x) {
   void test()() if(x == 10) {}
   // etc
}

test_t!(10) test;
test.test(); // X is ten
Run Code Online (Sandbox Code Playgroud)

但请注意那里使用的编译时变量:

  • 在定义类型时设置 - test_t!10与test_t的类型不同!20
  • 无法改变
  • 可以在static if模板约束,静态数组大小或其他任何使用数字文字的地方使用

虽然常规变量需要在方法内部使用常规if来进行任何分支.