使用C++ STL替代UNISTD .h GETOPT 我正在为用户编写C++命令行应用程序,我们将在各种平台上使用它。出于这个原因,我只使用stl编写。我想知道stl是否有一种很好的方法来解析输入参数,类似于unistd.h/getopt.h中使用的getopt函数,因为据我所知,这些参数不是独立于平台的。我已经考虑过使用while/for循环语句和switch语句,但不知道是否还有更优雅的语句。C++11可以,boost不行。

使用C++ STL替代UNISTD .h GETOPT 我正在为用户编写C++命令行应用程序,我们将在各种平台上使用它。出于这个原因,我只使用stl编写。我想知道stl是否有一种很好的方法来解析输入参数,类似于unistd.h/getopt.h中使用的getopt函数,因为据我所知,这些参数不是独立于平台的。我已经考虑过使用while/for循环语句和switch语句,但不知道是否还有更优雅的语句。C++11可以,boost不行。,c++,c++11,stl,argv,C++,C++11,Stl,Argv,解决方法是编写自己的或使用boost。在C++ 11中,没有标准的GETOPT功能。 < P> >标准C++中没有一种方法,但它是POSIX标准,它涵盖了很多平台Linux、*NIX、*BSD、MaOS、IOS、Android、CygWin。 在本机Win32上,只需将类似的内容嵌入到项目BSD中即可。FreeBSD也可以很容易地移植,尽管它不支持长选项格式。只是为了理解为什么不允许boost?基本上,我被告知这个程序不能有任何依赖项,只能使用stl。考虑到C++11是允许的,我意识到这有点尴尬

解决方法是编写自己的或使用boost。在C++ 11中,没有标准的GETOPT功能。

< P> >标准C++中没有一种方法,但它是POSIX标准,它涵盖了很多平台Linux、*NIX、*BSD、MaOS、IOS、Android、CygWin。
在本机Win32上,只需将类似的内容嵌入到项目BSD中即可。FreeBSD也可以很容易地移植,尽管它不支持长选项格式。

只是为了理解为什么不允许boost?基本上,我被告知这个程序不能有任何依赖项,只能使用stl。考虑到C++11是允许的,我意识到这有点尴尬——我想我们只是假设他们有最新的编译器?总之,这不是我的决定,我的老板认为boost对于一些不想下载额外内容的用户来说可能是一件麻烦事。我喜欢你老板的观点。精干和吝啬才是出路。但是可移植命令行处理的问题是,虽然有标准POSIX,例如,请参见此处,但命令行语法在*nix和windows之间是不同的。因此,一个可移植的解决方案必须接受的不是一种命令行语法,而是每个操作系统系列一种语法。您必须编写自己的代码,这将浪费您在程序中编写实际有用代码的时间。一个典型的非发明于此综合征的例子。每个人都使用getopt/boost.program_选项的原因不仅仅是-help.getopt是POSIX,但同时它是GPL许可的,这要求您的代码也是免费的,这不是一个好特性GNU getopt是GPL许可的,如果您需要捆绑它,明智的做法是选择一个BSD许可的,而不是我在回答中提供了几个链接。在GNU/Linux上,getopt是GLIBC的一部分,也就是说,所以没有问题。