Kto To Asked:2020-09-12 21:58:55 +0000 UTC2020-09-12 21:58:55 +0000 UTC 2020-09-12 21:58:55 +0000 UTC 在模板类中初始化常量 772 enum class E { e0, e1, e2, }; template <int S> class C { static const E _e = (S == 1 ? E::e0 : S == 123 ? E::e1 : E::e2); }; 如果我的枚举有很多值,可以通过 switch/case 或其他方式设置 _e 字段吗? c++ 3 个回答 Voted Best Answer HolyBlackCat 2020-09-12T22:05:14Z2020-09-12T22:05:14Z 您可以将逻辑放入函数或 lambda 中: static constexpr E _e = []{ ... return ...; }(); Harry 2020-09-12T22:09:22Z2020-09-12T22:09:22Z 好吧,如果你需要switch-为什么不呢? #include <iostream> using namespace std; enum class E { e0, e1, e2, e3, }; static constexpr E get(int S) { switch(S) { case 0: return E::e0; case 1: return E::e1; case 2: return E::e2; default: return E::e3; } } template <int S> class C { public: static const E e = get(S); void out() const { cout << "e = " << int(e) << endl; } }; int main(int argc, const char * argv[]) { C<1>().out(); C<2>().out(); C<123>().out(); } AR Hovsepyan 2020-09-13T03:00:36Z2020-09-13T03:00:36Z 您可以定义模板对象和相应的特化: enum class E { e0, e1, e2, edef}; template <int S> constexpr E e = E::edef; template<> constexpr E e<1> = E::e0; template<> constexpr E e<2> = E::e1; template<> constexpr E e<12> = E::e2; template <int S> struct C { static const E _e = e<S>; }; 如果 S它的值与列出的值不同,则e<S> == E::edef
您可以将逻辑放入函数或 lambda 中:
好吧,如果你需要
switch-为什么不呢?您可以定义模板对象和相应的特化:
如果
S它的值与列出的值不同,则e<S> == E::edef