Форум программистов, компьютерный форум CyberForum.ru

C++

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

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

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

Если моя функция LOG принимает qString* можно ли сделать так чтобы автоматически вызывалась конструирование временного объекта и он отправлялся в фунцию? т.е. вместо
C++
1
LOG(&qString("Привет мир"));
просто
C++
1
LOG("Привет мир");
Объявление LOG такое:
C++
1
void LOG(qString* Error, ...);
Мне нужно заявить как то компилятору что бы он мог преобразовывать из const char* в qString ? Что должна делать эта функция? Как быть? Впервые сталкиваюсь с таким
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
insideone
Модератор
Автор FAQ
3635 / 913 / 48
Регистрация: 10.01.2010
Сообщений: 2,460
13.02.2010, 18:39  [ТС]     Автоматическое преобразование стандартных типов #22
Цитата Сообщение от CheshireCat Посмотреть сообщение
Читай про паттерн "синглтон" (Singleton) - это то, что тебе нужно. Будет примерно так:
Я так понял нужно завести функцию которая возвращает определенный в ней статически объект класса Log? Думаю тогда myLog излищне и будет что то вроде
C++
1
LOG() << "сообщение";
Цитата Сообщение от zim22
используй паттерн Одиночка
Т.е. класс выходит как бы не для создания объекта а для использования статически? Интересное решение. спасибо
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 18:47     Автоматическое преобразование стандартных типов #23
Цитата Сообщение от insideone Посмотреть сообщение
Т.е. класс выходит как бы не для создания объекта а для использования статически?
ну почему же? класс создаёт объект. только один
insideone
Модератор
Автор FAQ
3635 / 913 / 48
Регистрация: 10.01.2010
Сообщений: 2,460
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; и другие экземпляры создавать нет надобности) Интересное решение. Да я тут с вами настоящим программистом стану, спасибо всем
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
13.02.2010, 20:01     Автоматическое преобразование стандартных типов #25
Цитата Сообщение от insideone Посмотреть сообщение
Он не умеет делать такое
sscanf умеет

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

GoF возьму на заметку, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2010, 03:29     Автоматическое преобразование стандартных типов
Еще ссылки по теме:

C++ Специализация шаблона для стандартных типов
C++ Преобразования стандартных типов
C++ Почему не происходит автоматическое преобразование стандартных типов?
Определение и использование функций для обработки стандартных типов данных Visual C++
Переобъявление стандартных типов C++ C++

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

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

Не по теме:

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

Yandex
Объявления
14.02.2010, 03:29     Автоматическое преобразование стандартных типов
Ответ Создать тему
Опции темы

Текущее время: 02:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru