我不确定我是否使用了正确的术语,但我正在努力做出类似这样的事情:
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)
这样的事情可能吗?我不会在现实代码中使用它,我只是想知道语言是否支持这样的东西.
你不能用运行时值来做,因为模板都是在编译时计算出来的.您可以使用编译时值来执行此操作:
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)
但请注意那里使用的编译时变量:
static if模板约束,静态数组大小或其他任何使用数字文字的地方使用虽然常规变量需要在方法内部使用常规if来进行任何分支.