1. 程式人生 > >C++ 命令列解析庫 tclap 使用方法

C++ 命令列解析庫 tclap 使用方法

  • 下載 tclap-1.2.1.tar.gz , 然後解壓,將 tclap-1.2.1/include/tclap 複製到工程目錄下的 3rdParty 資料夾

  • 新建 CMake 工程

    • CMakeLists.txt

      cmake_minimum_required(VERSION 2.8)
      project( TclapDemo )
      
      include_directories( ${PROJECT_SOURCE_DIR}/3rdParty )
      
      add_executable( main main.cpp )
    • main.cpp

       #include <iostream>
       #include <sstream>
      #include "tclap/CmdLine.h" //ostringstream 物件用來進行格式化的輸出,常用於將各種型別轉換為 string 型別 //ostringstream 只支援 << 操作符 template<typename T> std::string toString(const T& t){ std::ostringstream oss; //建立一個格式化輸出流 oss<<t; //把值傳遞如流中 return oss.str(); } //模板函式:將string型別變數轉換為常用的數值型別(此方法具有普遍適用性)
      template <class Type> Type stringToNum(const std::string& str){ istringstream iss(str); Type num; iss >> num; return num; } int main(int argc,char** argv){ try { // Define the command line object. TCLAP::CmdLine cmd("Command description message"
      , ' ', "0.1"); TCLAP::ValueArg<std::string> nameArg("n", "name", "Name to print", false, "Tom", "std::string", cmd); // Tom is the default value TCLAP::ValueArg<int> deviceIdArg("c", "cam", "Camera device id", false, 123, "integer", cmd); // 33 is the default value TCLAP::SwitchArg noShowOutputSw("", "no-show", "Don't show video", cmd, false); // false is the default value TCLAP::ValueArg<double> deviceDataArg("d", "data", "data user defined", false, 2.3456, "double", cmd); // 33 is the default value TCLAP::ValueArg<std::string> initBbArg("b", "boundingbox", "Init Bounding Box", false, "-1,-1,-1,-1", "x,y,w,h", cmd); // Tom is the default value // Parse the args. cmd.parse( argc, argv ); std::string name = nameArg.getValue(); std::cout << "My name is: " << name << std::endl; int camId = deviceIdArg.getValue(); std::cout << "Camera ID is: " << camId << std::endl; bool bIsShowVideo = noShowOutputSw.getValue(); std::cout << "The flag of showing video: " << bIsShowVideo << std::endl; double data = deviceDataArg.getValue(); std::cout << "data is: " << data << std::endl; std::stringstream initBbSs(initBbArg.getValue()); double initBb[4]; for (int i = 0; i < 4; ++i) { std::string singleValueStr; getline(initBbSs, singleValueStr, ','); initBb[i] = stringToNum<double>(singleValueStr); } std::cout << "initBb : " << initBb[0] << " " << initBb[1] << " " << initBb[2] << " " << initBb[3] << std::endl; } catch (TCLAP::ArgException &e) { // catch any exceptions std::cerr << "error: " << e.error() << " for arg " << e.argId() << std::endl; } return 1; }
  • 輸出結果

    [email protected]:build$ sudo ./main
    My name is: Tom
    Camera ID is: 123
    The flag of showing video: 0
    data is: 2.3456
    initBb : -1 -1 -1 -1
    [email protected]:build$ sudo ./main -h
    
    USAGE: 
    
       ./main  [-b <x,y,w,h>] [-d <double>] [--no-show] [-c <integer>] [-n
               <std::string>] [--] [--version] [-h]
    
    
    Where: 
    
       -b <x,y,w,h>,  --boundingbox <x,y,w,h>
         Init Bounding Box
    
       -d <double>,  --data <double>
         data user defined
    
       --no-show
         Don't show video
    
       -c <integer>,  --cam <integer>
         Camera device id
    
       -n <std::string>,  --name <std::string>
         Name to print
    
       --,  --ignore_rest
         Ignores the rest of the labeled arguments following this flag.
    
       --version
         Displays version information and exits.
    
       -h,  --help
         Displays usage information and exits.
    
    
       Command description message
    hwj@ubuntu:build$ sudo ./main --version
    
    ./main  version: 0.1
    
    [email protected]:build$ sudo ./main -d 0.2457 --no-show -c 2 -n Mike -b 2,3,4,-12
    My name is: Mike
    Camera ID is: 2
    The flag of showing video: 1
    data is: 0.2457
    initBb : 2 3 4 -12
    
    [email protected]:build$ sudo ./main --data -0.2457 --no-show --cam 22 -n Mike
    My name is: Mike
    Camera ID is: 22
    The flag of showing video: 1
    data is: -0.2457
    initBb : -1 -1 -1 -1
    

相關推薦

C++ 命令解析 tclap 使用方法

下載 tclap-1.2.1.tar.gz , 然後解壓,將 tclap-1.2.1/include/tclap 複製到工程目錄下的 3rdParty 資料夾 新建 CMake 工程 CMakeLists.txt cmake_minimum_required(VERSION 2.8) p

C++】cmdline —— 輕量級的C++命令解析

pre eas 很好 -- 創建 tar mod ans valid 平時用C++寫一些命令行工具,須要解析命令行的輸入參數,這是一項繁瑣而且easy出錯的工作,我們不應該將主要精力放在這上面。能夠考慮使用開源的庫。以下的cmdline就是當中很好用

常用的python命令解析

常用的python命令列解析庫,這兒介紹3種: 1.argparse 2.click 3.fire   argparse是python自帶的模組,要經歷解析器初始化、引數定義、解析一套流程,使用起來有些繁瑣。 一篇argparse使用的文章:https://ww

python常用的命令解析

1、argparse argparse是python自帶的模組,要經歷解析器初始化、引數定義、解析一套流程,使用起來有些繁瑣。 argpase的使用: class Calculator(object): """ 計算器 """

linux c 命令解析

getopt_long.h標頭檔案,是解析命令列的一個頭檔案,裡面包括了有無及可選引數的定義,以及可選引數的解析 其中看標頭檔案就可以知道getopt_long函式是其主要的功能 其包含巨集定義如下 #define no_argument 0 #def

glib命令解析簡單使用--GOptionEntry 命令引數

轉自:http://blog.csdn.net/ciahi/archive/2010/12/15/6076786.aspx 官網文件為: http://library.gnome.org/devel/glib/stable/glib-Commandline-option-p

C++ 命令引數解析

文章目錄 說明 短引數之 getopt() 長引數之 getopt_long() 長引數之 getopt_long_only() 說明 主要參考以下部落格: 部落格一:getopt和g

Python命令解析——argarse、docopt、click、invoke

argarse、docopt、click命令行示例:基本用法$ python [file].py hello Kyle Hello, Kyle! $ python [file].py goodbye Kyle Goodbye, Kyle!W/選項用法(標誌)$ python [file].py hello -

ansible命令傳遞引數的方法

    在命令列裡面傳值得的方法: ansible-playbook testyml --extra-vars "hosts=vm-1 user=root"   還可以用json格式傳遞引數: ansible-playbook test.yml

Python程式設計:使用sys、argparse、click、fire實現命令解析

python實現指令碼命令列的庫有: 內建庫sys 內建庫argparse 第三方庫click 第三方庫fire 內建庫sys sys.argv 包含命令列引數列表,第一個引數是檔名 sys_demo.py import sys d

【10】Caffe學習系列:命令解析

caffe的執行提供三種介面:c++介面(命令列)、python介面和matlab介面。本文先對命令列進行解析,後續會依次介紹其它兩個介面。其實大部分情況下我們會使用python介面進行呼叫,當然caffe提供了C++命令列介面,還是有必要了解一下。命令列引數有個優點是支援多GPU執行。 caf

在Windows環境下學習Linux命令的幾種方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

一個簡單的C#命令引數程式

 新建一個c#控制檯程式,命名為ConsoleApplication1 程式主體如下 class Program  {   static void Main(string[] args)   {   

程式設計小知識之命令解析

當前的軟體開發中,圖形介面已然大行其道,命令列似乎愈加式微,不過在一些場景下,命令列仍然必不可少~ 工具鏈的正常運作往往需要仰仗命令列,各個工具間的“溝通交流”基本都是通過命令列來完成,考慮一下 C 語言中 main 函式的標準定義: // C int main(i

linux 命令解析

從windows開發轉向linux開發的程式設計師,實際寫程式碼過程中還是有很多不同的,第一個遇到的不同可能是linux的命令列。windows 應用開發很少有命令列,而linux命令幾乎全有命令列,這是因為linux沒有操作介面,只能以命令列的方式來切換程式執行不同的命令,

【筆記】C++ 命令小遊戲 節奏大師(別踩白塊) 的製作

一.遊戲介紹 計組實驗大作業要在板子上做一個小遊戲,我們組要做節奏大師,先在命令列裡做了一個,主介面只有4*20. 可以選歌,目前支援的有:1.兩隻老虎, 2.兩隻老虎無盡版。 開始遊戲後 ∗

Python命令解析器argparse的使用

argparse是Python內建的一個用於命令項選項與引數解析的模組,在編寫指令碼的過程中是非常常用的。 在其使用中主要包含三個步驟: import argparse parser = argparse.ArgumentParser(descripti

命令解析:flag

一般使用 在寫命令列程式(工具、server)時,對命令引數進行解析是常見的需求。Go的命令列引數解析通過flag包實現,先看下面這個例子,假設我們實現了一個server,啟動這個server的時候需要指定監聽的tcp地址(例如:127.0.0.1:1314)

在VS中向命令新增引數的方法

在VS中向命令列新增引數,即向main()函式傳遞引數的方法: 右鍵單擊要 新增引數的工程-->屬性-->配置屬性-->除錯,在右側“命令引數”欄輸入要新增的引數,各引數間用空格分離。例如: "-hide_banner"  "Z:/media/subti

python的命令解析argparse

# -*- coding: utf-8 -*- import argparse args = "-f hello.txt -n 1 2 3 -x 100 -y b -z a -q hello @args.txt i_am_bar -h".split() # 使用