【发布时间】:2022-01-12 09:53:53
【问题描述】:
template <typename Stru_>
class templateClasse{
public:
using stru = Stru_;
static void method_0(int sk, int sl){
printf("class templateClass method_0 sk: %d sl: %d\n", sk, sl);
}
static void method_1(int a){
if (stru::isvec){
method_0(0, a);
} else{
method_0(a, 0);
}
}
};
我想根据 bool stru::isvec 更改method_0 中的输入,如代码所示,同时,我希望在编译期间选择if (stru::isvec) else 分支而不是运行时。我的问题是:
- 这段代码在编译时是否选择了
method_0? - 代码只有在这两个方法前加上关键字
static才编译成功。为什么static在这种情况下有效?通常,我对static的理解是这样的:
这些静态变量存储在静态存储区,而不是在 堆栈。
我知道当我使用static const int tmp = 50; 时,这个tmp 是在编译时计算的。那么static可以粗略理解为帮助编译时计算的关键字吗?
- 在这种情况下我们还有其他解决方案吗?
提前致谢!
【问题讨论】:
-
关键字
static有多种含义,具体取决于您使用它的位置。在类定义中,它表明类的成员不会与类的任何实例相关联,因此将具有延长的生命周期。它与堆栈/堆/只读内存部分/等无关。
标签: c++ templates static metaprogramming