[ C++ ] 名前空間内での条件分岐について
[ C++ ] 名前空間内での条件分岐について
閲覧ありがとうございます.
C++98 にて以下のプログラムを実装中です.
現在,「test0.inc」,および「test1.inc」ファイルで名前空間を定義し,それぞれを「main.cpp」ファイルに読み込み使用するプログラムを作成しています.
そこで,「test1.inc」で定義した名前空間内の定数(constexpr int型)の値を,条件に応じて変更したいです.
今はラムダ式を用いて条件分岐を行おうと考えており,以下のように記述していますが,コンパイル時にエラーがでてしまっています.
これを解決して条件に応じて値を変更できるようにしたいです.
以下記述したコード
constexpr int
型の変数i
に対して以下のような記述をするとエラーが生じてコンパイルできませんでした.
// test0.inc内
namespace ns {
const bool bool_hoge = json_reader("filename.json"); // json_reader("ファイル名")はjsonファイルを読み取る関数
}
// test1.inc内
namespace ns2 {
constexpr int i = [](){
int num = 1;
if( ns::bool_hoge ) num = 2;
return num;
}();
}
// main.cpp内
#include "test0.inc"
#include "test1,inc"
int main() {
std::cout << i << std::endl;
return 0;
}
エラー内容は以下の通りです.
in ‘constexpr’ expansion of ‘<lambda closure object>ns2::<lambda()>{}.ns2::<lambda()>()’
エラー: the value of ‘ns::bool_hoge’ is not usable in a constant expression
}();
^
比較用として,string型の変数に対してはラムダ式で以下のように記述しています. (こちらのみの場合はコンパイルが通って実行可能となりました.)
namespace ns2 {
string str = [](){
string name = "hoge1";
if( ns::bool_hoge ) name = "hoge2";
return name;
}();
}
まだまだ勉強中で,ラムダ式の使用方法についても見よう見まねでトライしている最中です.何卒ご教示いただければ幸いです.