Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 22:50   #1
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
Сообщение Посоветуйте как оптимизировать

Переписываю чужой код и заодно учусь
встретил такое

Код:
SettingsFile ReadSettingsFile(const char *readingfile)
{
	ReadConfigFile cfg(readingfile);
	SettingsFile Config;
			
		if (cfg.keyExists("RunDay"))
			Config.iRunDay = cfg.getValueOfKey<int>("RunDay");
		else cout << "value Config.iRunDay: not found \n";
		if (cfg.keyExists("AgentDirSize"))
			Config.iAgentDirSize = cfg.getValueOfKey<int>("AgentDirSize");
		else cout << "value Config.iAgentDirSize: not found \n";
		if (cfg.keyExists("ExternalDiskCopyNumber"))
			Config.iExternalDiskCopyNumber = cfg.getValueOfKey<int>("ExternalDiskCopyNumber");
		else cout << "value Config.iExternalDiskCopyNumber: not found \n";
И так еще дофига копипастовых строчек
Это процедура чтения фала настроек
все данные сохраняются в структуре

Код:
struct SettingsFile
  { 
	bool bEncryptOutput; // Шифровать выходные файлы

    int iRunDay; //Запуск через iRunDay дней
	int iAgentDirSize; // Макс размер папки агента
	int iExternalDiskCopyNumber; // Колво копий на внешнем диске
	int iInternalDiskCopyNumber; // кол-во копий на внутр диск
	int iAlertLogMaximumSize; // Максимальный размер алертлога
	int iAlertLogWarningSize; // Критический размер алертлога
	int iListenerLogMaximumSize; // Максимальный размер листенера
	int iListenerLogWarningSize; // Критический размер листенера
И еще много строчек структуры
Нет ли возможности оптимизировать этот индусский код
поможет ли создание класса в этом случае?
Заранее спасибо
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Старый 28.02.2012, 23:01   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
int readSetting(ReadConfigFile &cfg, const char *paramName)
{
    if(cfg.keyExists(paramName))
        return cfg.getValueOfKey<int>(paramName);
    else std::cout<<"Value Config."<<paramName"<<": not found"<<std::endl;
    return -1;
}

SettingsFile ReadSettingsFile(const char *readingfile)
{
	ReadConfigFile cfg(readingfile);
	SettingsFile Config;
	Config.iRunDay = readSetting(cfg, "RunDay");
	Config.iAgentDirSize = readSetting(cfg, "AgentDirSize");
	Config.iExternalDiskCopyNumber = readSetting(cfg, "ExternalDiskCopyNumber");
так как значение обязано быть всегда(в переменной всмысле)
я принял -1 за пустое значение.

думаю намек ясен.

если там есть разные типы в структуре то можно еще и шаблонизировать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.02.2012, 23:09   #3
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
По умолчанию Спасибо за решение

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
int readSetting(ReadConfigFile &cfg, const char *paramName)
{
    if(cfg.keyExists(paramName))
        return cfg.getValueOfKey<int>(paramName);
    else std::cout<<"Value Config."<<paramName"<<": not found"<<std::endl;
    return -1;
}

SettingsFile ReadSettingsFile(const char *readingfile)
{
	ReadConfigFile cfg(readingfile);
	SettingsFile Config;
	Config.iRunDay = readSetting(cfg, "RunDay");
	Config.iAgentDirSize = readSetting(cfg, "AgentDirSize");
	Config.iExternalDiskCopyNumber = readSetting(cfg, "ExternalDiskCopyNumber");
так как значение обязано быть всегда(в переменной всмысле)
я принял -1 за пустое значение.

думаю намек ясен.

если там есть разные типы в структуре то можно еще и шаблонизировать.
Приятное решение примерно такая идя была, но решение Ваше интереснее. да - там несколько типов данных string, int, bool, double , как шаблон написать не в курсе
Можно ли в масиве например описать все переменные
и потом в цикле подставить разом все из масива?

PS Вышеприведенные код уже переписан мною до этого имена переменных были var1,var2 итд коментов небыло вообще. Я вообще пхпист а тут нате на работе дали задачку перелопатить. спасибо за помощь
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883

Последний раз редактировалось Karmadon; 28.02.2012 в 23:13. Причина: PS
Karmadon вне форума Ответить с цитированием
Старый 28.02.2012, 23:18   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
template<typename T>
void readSetting(T &val, ReadConfigFile &cfg, const char *paramName)
{
    if(cfg.keyExists(paramName))
        val = cfg.getValueOfKey<T>(paramName);
    else std::cout<<"Value Config."<<paramName"<<": not found"<<std::endl;
}

SettingsFile ReadSettingsFile(const char *readingfile)
{
	ReadConfigFile cfg(readingfile);
	SettingsFile Config;
	readSetting(Config.iRunDay, cfg, "RunDay");
	readSetting(Config.iAgentDirSize, cfg, "AgentDirSize");
	readSetting(Config.iExternalDiskCopyNumber, cfg, "ExternalDiskCopyNumber");
поидее так.

Цитата:
Можно ли в масиве например описать все переменные
и потом в цикле подставить разом все из масива?
нечто подобное конечно можно сотворить, но это надо сразу делать(подобное видел в boost::fusion)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.02.2012, 23:31   #5
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
По умолчанию

Спасибо, буду разбирать последний с шаблоном, ибо пока не все понятно как оно работает.

И небольшой оффтоп чтобы тему новую не создавать

Код:
cout << getenv("TEMP") << endl;
	cout << getenv("USERDOMAIN") << endl;
Есть ли проще варианты? и как ее(переменную окружения) в переменную запхнуть
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Старый 28.02.2012, 23:37   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Есть ли проще варианты?
куда проще то?
итак одним вызовом получаете.
Цитата:
и как ее(переменную окружения) в переменную запхнуть
Код:
char *pTemp=getenv("TEMP");
//или
std::string pTemp(getenv("TEMP"));
только помним, что в первом случае её изменять нельзя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.02.2012, 23:47   #7
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
Хорошо

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
куда проще то?
итак одним вызовом получаете.
Это первая функция которую нарыл и она оказалась самой простой, просто может что еще более удобное есть))
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
char *pTemp=getenv("TEMP");
//или
std::string pTemp(getenv("TEMP"));
только помним, что в первом случае её изменять нельзя.
ну вот а я по первому примеру чуть голову себе не проломил...
Второй вариант - то что надо огромное спасибо!!!
Но по шаблонам пошел маны читать))
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Старый 29.02.2012, 02:12   #8
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
Радость Будьте Добры, обьясните

Если не затруднит, опишите в чем различие реализаций описанных выше - через функцию и с помощью шаблона
Что-то никак допетрить не могу

PS - Код функции написанные с помощью шаблона работает прекрасно спасибо, но хотелось бы понять как)))
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Старый 29.02.2012, 21:14   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в данном случае компилятор способен понять(без явного указания) какой тип мне нужен.
то есть вместо T ставиться тип переменной что передаете(в моих примерах это int)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.02.2012, 22:47   #10
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
Стрелка

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в данном случае компилятор способен понять(без явного указания) какой тип мне нужен.
то есть вместо T ставиться тип переменной что передаете(в моих примерах это int)
Вроде разобрался, почитал, довольно интересная весць. Нужно взять на вооружение
Т.е. это просто описатель обычной функции(ну с небольшими модификациями) за исключением того, что не требуется указывать явно тип данных, очень полезно при использовании классов, при методах-конвертерах
так точно.
Спасибо за интересную ветку развития
Будет куда взор направить в книгах))
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать? А)-(дрей Microsoft Office Excel 31 12.04.2011 21:38
Asm: как оптимизировать алгоритм? bagfinder Помощь студентам 0 03.04.2011 12:28
Как оптимизировать код C++ slim>>> Помощь студентам 10 25.01.2011 00:05
Как оптимизировать код Delphi OST_K Помощь студентам 1 30.05.2010 06:59
Как оптимизировать плиззз alex181264 Microsoft Office Excel 3 13.04.2009 06:27