C++ は、プログラムを毎回再コンパイルせずにプログラム内のパラメーターを変更するように ini ファイルを構成します。

プログラムを再コンパイルせずにプログラムパラメータを変更する

iniファイルを使用する

ini ファイルでは、次の形式で設定できます。

[x_pose]
value=0.5

[y_pose]
value=0.5

[z_pose]
value=1

このうち、`[x_pose]`、`[y_pose]`、`[z_pose]`は設定項目名section、`value`は設定項目の値です。
cpp ファイルでは、boost や Qt が提供する QSettings クラスなどのサードパーティ ライブラリを使用して、ini ファイルを読み取ることができます。

ブースト ライブラリは ini ファイルを読み取ります

ブースト ライブラリを例に挙げると、ini ファイルは次のように読み取ることができます。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <iostream>

int main()
{
    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("example.ini", pt);

    float x_pose = pt.get<float>("x_pose.value");
    float y_pose = pt.get<float>("y_pose.value");
    float z_pose = pt.get<float>("z_pose.value");

    std::cout << "x_pose: " << x_pose << std::endl;
    std::cout << "y_pose: " << y_pose << std::endl;
    std::cout << "z_pose: " << z_pose << std::endl;

    return 0;
}

上記のコードでは、`example.ini` は ini 設定ファイルの名前であり、`x_pose.value`、`y_pose.value`、`z_pose.value` は対応する設定項目の名前と値です。上記のコードを実行して、構成ファイル内のパラメーターを読み取ります。

Cmake を使用してプログラムをコンパイルします。

CMakeLists.txt の内容は次のとおりです。

cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

project(lab1)

add_executable(lib main.cpp)

次に、「build」フォルダを作成し、フォルダ内でターミナルを開き、「cmake ..」「make」を実行し、実行ファイルlibを生成し、「./lib」を実行します。実行出力:

x_pose: 0.5
y_pose: 0.5
z_pose: 1

ダンス.a库

INI ファイル クラスを使用して、INI 構成ファイルの読み取りと書き込みを行うことができます。具体的な手順は次のとおりです。

1. INI 構成ファイルを書き込み、その構成ファイルにパスを書き込みます。たとえば、次のコードを myconfig.ini ファイルに追加します。

[Section1]
FilePath=/usr/myhome/123.txt

2. プログラムに INI ファイル クラスを導入し、設定ファイル内のパスを読み取ります。例えば:
 

#include <iostream>
#include "ini/INI.h"

int main() {
    // 读取配置文件
    INIReader reader("myconfig.ini");
    if (reader.ParseError() < 0) {
        std::cout << "Failed to load ini file." << std::endl;
        return 1;
    }

    // 读取配置参数
    std::string filePath = reader.Get("Section1", "FilePath", "");

    // 打开文件并读取内容
    std::ifstream ifs(filePath);
    if (!ifs.is_open()) {
        std::cout << "Failed to open file: " << filePath << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(ifs, line)) {
        std::cout << line << std::endl;
    }

    return 0;
}

上記のコードは、リンク時に `INI.h` ヘッダー ファイルをインポートし、`libini.a` ライブラリ ファイルをリンクする必要があることに注意してください。

さらに、INI 設定ファイルとプログラムが同じディレクトリにない場合は、設定ファイルの絶対パスまたは相対パスを指定する必要があります。

ただし、ini ライブラリは実験に成功しなかったため、boost ライブラリが引き続き使用されます。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
//读取ini配置文件,不需要需要using namespace std;
    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("../example.ini", pt);

    // 读取配置参数
    std::string filePath =pt.get<string>("Section1.FilePath");

    // 打开文件并读取内容
    std::ifstream ifs(filePath);
    if (!ifs.is_open()) {
        std::cout << "Failed to open file: " << filePath << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(ifs, line)) {
        std::cout << line << std::endl;
    }

    return 0;
}

 要約:

iniファイルは次のように記述されます

[section1]

name1=value1

name2=value2

name3=value3

[section2]

name1=value1

...

ブースト ライブラリを使用してプログラムを読み込みます。

    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("example.ini", pt);

    float sec1_name1 = pt.get<float>(" section1.name1");
    float sec1_name2= pt.get<float>(" section1.name2");
    float sec2_name1 = pt.get<float>(" section2. name1");

コマンドライン引数または環境変数を使用することも、コードを再コンパイルせずにプログラム パラメータを動的に調整する一般的な方法です。

コマンドライン引数の使用

コマンドライン引数の使用方法は次のとおりです。

1. プログラム内で動的に設定する必要がある変数を定義します。次に例を示します。

int myVar1 = 100;
string myVar2 = "hello";
double myVar3 = 1.23;

2. プログラムが開始したら、コマンド ライン引数を解析し、対応する変数の値として使用します。次に例を示します。
 

int main(int argc, char** argv) {
    // 解析命令行参数
    for (int i = 1; i < argc; i += 2) {
        if (strcmp(argv[i], "-myVar1") == 0) {
            myVar1 = atoi(argv[i+1]);
        } else if (strcmp(argv[i], "-myVar2") == 0) {
            myVar2 = argv[i+1];
        } else if (strcmp(argv[i], "-myVar3") == 0) {
            myVar3 = atof(argv[i+1]);
        }
    }

    // 程序正常执行
    // ...
}

3. プログラムを開始するときに、コマンド ライン パラメーターを使用して、対応する変数の値を設定します。次に例を示します。

$ ./my_program.exe -myVar1 200 -myVar2 world -myVar3 3.14

環境変数を使用する

環境変数の使用方法は次のとおりです。

1. プログラム内で動的に設定する必要がある変数を定義します。次に例を示します。

int myVar1 = atoi(getenv("MY_VAR_1") ?: "100");
string myVar2 = (getenv("MY_VAR_2") ?: "hello");
double myVar3 = atof(getenv("MY_VAR_3") ?: "1.23");

2. プログラムを開始する前に、対応する環境変数を設定してプログラム パラメータの値を設定します。次に例を示します。

$ export MY_VAR_1=200
$ export MY_VAR_2=world
$ export MY_VAR_3=3.14
$ ./my_program.exe

コマンドラインパラメータや環境変数の使用方法は手動で設定する必要があり、管理上不便であることに注意してください。さらに多くのパラメーターを管理する必要がある場合は、構成ファイルを使用することをお勧めします。

おすすめ

転載: blog.csdn.net/weixin_56337147/article/details/130846383