Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
#1

Автоматическое преобразование стандартных типов - C++

13.02.2010, 00:39. Просмотров 3079. Ответов 26
Метки нет (Все метки)

Если моя функция LOG принимает qString* можно ли сделать так чтобы автоматически вызывалась конструирование временного объекта и он отправлялся в фунцию? т.е. вместо
C++
1
LOG(&qString("Привет мир"));
просто
C++
1
LOG("Привет мир");
Объявление LOG такое:
C++
1
void LOG(qString* Error, ...);
Мне нужно заявить как то компилятору что бы он мог преобразовывать из const char* в qString ? Что должна делать эта функция? Как быть? Впервые сталкиваюсь с таким
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2010, 00:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Автоматическое преобразование стандартных типов (C++):

Автоматическое преобразование китайского кода в нормальный - C++
У меня есть огромный шмат кода примерно такого вида: if (x < 10 && y > 0 && z != 0) return 1; if (x < 10 && (y > 0 || z < 100)) ...

Код стандартных библиотечных фунций - C++
Подскажите, пожалуйста, где можно посмотреть исходный код функций стандартных библиотек, например, math.h, string.h? Не интерфейс функций,...

UDP чат без использования стандартных компонентов - C++
Здраствуйте! Срочно нужен UDP чат но БЕЗ ИСПОЛЬЗОВАНИЯ стандартных компонентов... Кто может подсказать где можно найти, или какую нибуть...

Преобразование типов - C++ Builder
Ребята помогите разобраться с проблемой вот строка кода TrayIcon->Handle = LoadImage(HInstance,L"MY_ICON",RT_ICON,0,0,0); ...

преобразование типов - C++ Builder
в delphi то strtoint(переменная), а в c++ builder как выглядит решил попрактиковаться в c++builder'е

Преобразование типов в XE2 - C++ Builder
При компиляции проектов (работают в Builder C++ 6 в BDS 2006) в среде XE2 - возникают новые ошибки, в частности вида: Cannot convert...

26
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
13.02.2010, 15:23  [ТС] #16
Э... я имею ввиду что получать то она должа только строки, но писать я могу так:
C++
1
LOG("Сообщение", 20, "\0");
20 - это же не строка, но т.к. у qString есть конструктор из int он может сделать это преобразование сам
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 15:25 #17
Цитата Сообщение от insideone Посмотреть сообщение
Э... я имею ввиду что получать то она должа только строки
boost format library - то, что доктор прописал
1
CheshireCat
Эксперт С++
2903 / 1252 / 81
Регистрация: 27.05.2008
Сообщений: 3,437
13.02.2010, 16:46 #18
Нет, boost format - это, пожалуй, из пушки по воробьям....
Если у insideone такая возможность имеется, я бы предложил изменить интерфейс LOG таким образом, чтобы (этот объект) принимал "оператором сдвига" в стиле C++ :
C++
1
LOG << "Возникла ошибка, код " << errorCode << ", дополнительная информация: " << strDopInfo;
1
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
13.02.2010, 17:31  [ТС] #19
У меня была такая мысль, однако придется делать его глобальным? Он используется повсеметсно а делать член-указатель во всех объектах чокнешься... или в данном случае глобал - нормальное решение?
0
CheshireCat
Эксперт С++
2903 / 1252 / 81
Регистрация: 27.05.2008
Сообщений: 3,437
13.02.2010, 17:57 #20
Читай про паттерн "синглтон" (Singleton) - это то, что тебе нужно. Будет примерно так:
C++
1
myLog::Instance() << "тестовое сообщение";
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 18:00 #21
Цитата Сообщение от insideone Посмотреть сообщение
У меня была такая мысль, однако придется делать его глобальным?
сделай. объекты cin/cout - тоже глобальны и ничего. пользуемся.
используй паттерн Одиночка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 238.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <sstream>
#include <iostream>
 
class Log {
public:
  friend std::ostream &operator<<(std::ostream &out, const Log &rhs);
 
  static Log &Instance() {
    static Log instance_;
    return instance_;
  }
  template <typename T>
  Log &operator<<(T t) {
    data_ << t;
    return *this;
  }  
private:  
  Log() { }
  std::ostringstream data_;
};
 
std::ostream &operator<<(std::ostream &out, const Log &rhs) {
  out << rhs.data_.str();
  return out;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  Log::Instance() << 12 << "hello" << 22.33 << "\n";
  std::cout << Log::Instance();
 
  return 0;
}
1
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
13.02.2010, 18:39  [ТС] #22
Цитата Сообщение от CheshireCat Посмотреть сообщение
Читай про паттерн "синглтон" (Singleton) - это то, что тебе нужно. Будет примерно так:
Я так понял нужно завести функцию которая возвращает определенный в ней статически объект класса Log? Думаю тогда myLog излищне и будет что то вроде
C++
1
LOG() << "сообщение";
Цитата Сообщение от zim22
используй паттерн Одиночка
Т.е. класс выходит как бы не для создания объекта а для использования статически? Интересное решение. спасибо
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 18:47 #23
Цитата Сообщение от insideone Посмотреть сообщение
Т.е. класс выходит как бы не для создания объекта а для использования статически?
ну почему же? класс создаёт объект. только один
0
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
13.02.2010, 19:58  [ТС] #24
оффтоп про std::string и qString
Цитата Сообщение от ISergey Посмотреть сообщение
И Чем тебе не угодил стандартный класс std::string
Он не умеет делать такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
qString Temp = CURLINE.c_str(); // Temp == "10%, 30 - 40"
 
qString GraphTime, GraphData, GraphInterval;
size_t CutTo = Temp.Find(",")-1;
Temp
    .Cut(GraphTime, 0, CutTo) // GraphTime == "10%"
    .Trim("%, \t", LTRIM)
    .Find(CutTo, " \n\t")
    .Cut(GraphData, 0, CutTo+1) // GraphData == "30"
    .Trim(" -\t", LTRIM)
    .Find(CutTo, "\0")
    .Cut(GraphInterval, 0, CutTo-1); // GraphInterval == "40"

Добавлено через 3 минуты
Цитата Сообщение от zim22 Посмотреть сообщение
ну почему же? класс создаёт объект. только один
Да) Объект создается, но впринципе класс Log изначально проектируется под 1 экземпляр который создаться статически, а Log MyLog; и другие экземпляры создавать нет надобности) Интересное решение. Да я тут с вами настоящим программистом стану, спасибо всем
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 20:01 #25
Цитата Сообщение от insideone Посмотреть сообщение
Он не умеет делать такое
sscanf умеет

Добавлено через 1 минуту
Цитата Сообщение от insideone Посмотреть сообщение
но впринципе класс Log изначально проектируется под 1 экземпляр который создаться статически,
это у меня он статический. можешь его динамически создавать.
также можешь динамически его конфигурировать нужным типом подкласса.
почитай у GoF про этот паттерн.
1
insideone
Модератор
Автор FAQ
3647 / 927 / 53
Регистрация: 10.01.2010
Сообщений: 2,498
13.02.2010, 20:17  [ТС] #26
Цитата Сообщение от zim22 Посмотреть сообщение
sscanf умеет
Э.. это не для вывода ли? Мне вообще нужно сохранить строки эти чтобы потом их преобразовывать в цифры и послать в функцию. В общем я создал этот класс qString как небольшую замену регулярным выражениям, по крайне это удовлетворяем моим подтребностям. Здесь совмещены удачные (по моему мнению) идеи из Lua (-1 значит последний элемент), JavaScript - jQuery (цепные функции). Хотя конечно я много раз слышал что нельзя программировать на C++ как на других языках, но тут я правда знаю что творю.

GoF возьму на заметку, спасибо
0
ISergey
14.02.2010, 03:29     Автоматическое преобразование стандартных типов
  #27

Не по теме:

Он не умеет делать такое
Фух.. не дай бог.. такое в Стандарте увидеть..

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2010, 03:29
Привет! Вот еще темы с ответами:

Преобразование типов переменных - C++ Builder
Доброго вечера. Можете показать при пример преобразования переменной TString в AnsiString Добавлено через 8 минут Что я не...

Наследование от стандартных компонент - C++ Builder
Проблема заключается в том, что мне необходимо в узел TTreeNode добавить дополнительно данные, как пример строку и при этом я создаю новый...

3 стандартных кнопке на форме - C++ Builder
Привет всем, как всем известно на форме находится 3 стандартных кнопки (свернуть, развернуть на весь экран и закрыть) подскажите как можно...

Почему не происходит автоматическое преобразование стандартных типов? - C++
Имеется следующий код : int a = 10; cout&lt;&lt;a/100&lt;&lt;endl; Вариант из явным преобразованием работает чудесно :


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
14.02.2010, 03:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru