#質問内容
次のような感じで変数の存在の有無を決定することはできないのでしょうか?
trueの場合にはvalが存在していて、falseの場合には何も変数が存在しないようにします。
cpp
1 2#include <iostream> 3#include <type_traits> 4 5template<bool define> 6struct HOGE { 7 std::enable_if_t<define, int> val; 8}; 9 10int main() { 11 HOGE<true> hoge;//int型の変数valを宣言する 12 HOGE<false> hoge2;//valは存在しない 13}
つまりstd::conditional
のenable_if版のようなイメージです。
cpp
1#include <iostream> 2#include <type_traits> 3 4template<bool define> 5struct HOGE { 6 std::conditional_t<define, int, char> val; 7}; 8 9int main() { 10 HOGE<true> hoge; 11 HOGE<false> hoge2; 12 13 std::cout << typeid(hoge.val).name();//int 14 std::cout << typeid(hoge2.val).name();//char 15}
#考えたこと
特殊化を考えたのですが、上のコードのように二択ならまだしも、より多くの場合わけがある場合はこんがらがってしまうような気がします...。また、共通する他の変数や関数が多い場合は一か所かえただけで全部の特殊化を変える必要が出てきてしまいます。
#include <iostream> #include <type_traits> template<bool define = false> struct HOGE { /* 共通する変数や関数 */ }; template<> struct HOGE<true> { int val; /* 共通する変数や関数 */ }; int main() { HOGE<true> hoge;//int型の変数valを宣言する HOGE<false> hoge2;//valは存在しない }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。