コード例 #1
0
Expected<ParsedCommand> OptionParser::parseCommand(int argc, const char * const *argv)
{
	Expected<void> result = parseOptions(argc, argv);
	if (!result.isOk())
		return result;

	return getCommand();
}
コード例 #2
0
int main(int argc, char *argv[])
{
	OptionParser parser;

	Expected<ParsedCommand> parsed = parser.parseCommand(argc, argv);
	if (!parsed.isOk())
	{
		Logger::error(parsed.getMessage());
		printUsage(parser);
		return parsed.getCode();
	}

	ParsedCommand command = parsed.get();
	Logger::init(command.isVerbose());
	if (command.isUsageIssued())
	{
		printUsage(parser);
		return 0;
	}

	Expected<Visitor> vRes = Visitor::create(command);
	if (!vRes.isOk())
	{
		Logger::error(vRes.getMessage());
		printUsage(parser);
		return vRes.getCode();
	}
	Visitor &v = vRes.get();
	boost::mpl::for_each<desc_type>(boost::ref(v));

	Expected<void> result = v.getResult();
	if (!result.isOk())
	{
		Logger::error(result.getMessage());
		return result.getCode();
	}

	return 0;
}