我想以下列方式将参数传递给我的C++程序:
./myprog --setting=value
Run Code Online (Sandbox Code Playgroud)
是否有任何图书馆可以帮助我轻松完成这项工作?
我有这样的功能
const string &SomeClass::Foo(int Value)
{
if (Value < 0 or Value > 10)
return "";
else
return SomeClass::StaticMember[i];
}
Run Code Online (Sandbox Code Playgroud)
我得到warning: returning reference to temporary
.这是为什么?我认为函数返回的两个值(引用const char*""和对静态成员的引用)不能是临时的.
我正在寻找替代方法来获取命令行参数argc
并argv
提供给进程,而无需直接访问传入的变量main()
.
我想使一类是独立的main()
,这样argc
并argv
没有明确地传递给使用它们的代码.
编辑:有些澄清似乎是有序的.我有这门课.
class Application
{
int const argc_;
char const** const argv_;
public:
explicit Application(int, char const*[]);
};
Application::Application(int const argc, char const* argv[]) :
argc_(argc),
argv_(argv)
{
}
Run Code Online (Sandbox Code Playgroud)
但我想一个默认的构造Application::Application()
,有一些(最有可能)的C代码,拉动argc
和argv
从某处.
可能重复:
C++有哪些参数解析器库?
我已经做了一些寻找,并且有很多用于命令行选项解析的库,但很难区分它们.有没有人有任何经验?是否比其他任何人更难/更好/更快/更容易/更好?或者我应该自己成长?
有效地在C++中进行命令行参数处理的建议:
注意:仅限Windows
1: #include <iostream.h>
2: int main(int argc, char **argv)
Run Code Online (Sandbox Code Playgroud)
而不是,例如:
if ( argc != 3 ) {
....
}
Run Code Online (Sandbox Code Playgroud)
问候
如果应用程序是unicode,如何解析传递给应用程序的整数作为命令行参数?
Unicode应用程序有这样的主要:
int _tmain(int argc, _TCHAR* argv[])
Run Code Online (Sandbox Code Playgroud)
argv [?]是一个wchar_t*.这意味着我不能使用atoi.如何将其转换为整数?stringstream是最好的选择吗?
我知道getopts
和argp
.我只是查看了boost
,他们有program_options
一个用于解析命令行参数的库.
我不确定使用哪一个.我知道getopts
是POSIX
,而argp
不是但是,这并不重要,我.重要的是易用性.你能推荐(优点/缺点吗?)一个.我也对其他图书馆开放.
有没有一种真正有效的方法来处理C++中的命令行参数?
我在下面做的事情感觉完全是业余的,我无法想象这是如何在专业软件中真正处理命令行参数(atoi,硬编码的argc检查).
// Command line usage: sum num1 num2 int main(int argc, char *argv[]) { if (argc < 3) { cout << "Usage: " << argv[0] << " num1 num2\n"; exit(1); }
int a = atoi(argv[1]); int b = atoi(argv[2]); int sum = a + b;
cout << "Sum: " << sum << "\n";
return 0; }
可能的重复:
C++有哪些参数解析器库?
C++ Parse命令行参数
您可以建议的最佳C++命令行参数解析器是什么?
我必须通过使用命令行参数(argv,argc)在c ++中的函数内传递系统配置细节.该函数如下所示:
function(char * array[]){
windows_details = array[1];
graphic_card = array[2];
ram_detail = array[3];
procesor_detail = array[4];
}
int main(int argc, char *argv[]){
char *array[] = { argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]};
function(array);
}
Run Code Online (Sandbox Code Playgroud)
所以,当我按如下方式执行程序exe时,我得到正确的输出:
sample.exe windows_32bit nividia 5Gb i7processor
Run Code Online (Sandbox Code Playgroud)
但我关注的是每次值都必须按特定顺序排列,即用户必须注意"windows_details"将是第一个命令行参数,然后是"graphic_card",并且像ram_details和processor_details一样,所以这个解决方案不健壮,即如果值序列互换,结果将不正确.我希望解决方案与序列无关,无论在正确位置要替换的值的顺序,还是将值作为值传递给选项的命令行参数.例如如下:
sample.exe --configuration i7_processor 5GB windows_32bit nividia or
sample.exe --configuration 5GB i7_processor nividia windows_32bit or
sample.exe --configuration nividia windows_32bit 5GB i7_processor
.
.
Run Code Online (Sandbox Code Playgroud)
因此,像上面一样,选项为"--configuration",然后是任何序列中的详细信息.我尝试添加选项部分如下,但它不起作用:
int main(int argc, char *argv[]){
char *array[] = { argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]}; …
Run Code Online (Sandbox Code Playgroud) 我刚刚在课堂上学习命令行参数,但我还没有完全理解它们.我知道它们存储在*argv []中,并由argc计算,但我不明白它们的用途或来自何处.我试图用C++编写一个程序来查找用户输入的命令行参数的总和,并包含下面的代码,但我不知道它是否正确或我是如何测试的.如果有人能给我一个简单的描述它们是什么以及如何访问它们将非常感激.
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
double sum = 0;
for(int counter = 0; counter < argc; counter ++)
{
sum += atof(argv[counter]); //compact form of : sum = sum + atof(argv[counter]);
}
cout << "Sum = " << sum << endl;
}
Run Code Online (Sandbox Code Playgroud) 我是C++的新手,我想知道如何在有一些功能可用的情况下做一个简单的程序.
例如:
mypg.exe function1 string1
mypg.exe function1 textfile1
Run Code Online (Sandbox Code Playgroud)
从str /文件中获取文本并显示或打印.
然后:
mypg.exe function2 string1
mypg.exe function2 textfile1
Run Code Online (Sandbox Code Playgroud)
使用文本作为不同的东西......等等.
任何手册/教程或帮助?我应该学到什么才能做到这一点?
非常感谢 :)