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

Наследование от shared_ptr - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ пример из книги http://www.cyberforum.ru/cpp-beginners/thread939942.html
#include <iostream.h> long summa (int k,...){ int *pik=&k; char *pc=(char *)pik; cout <<" *pc="<<*pc<<" pc="<<pc; long total =0; for (int x=k;x>0;x--) { ...
C++ Разработка графического редактора Помогите пожалста.. Разработка графического редактора.Программный модуль должен обеспечивать построение многоугольников,выбор цвета фона и контура, сохранения в цифровом формате(х,у),открытие... http://www.cyberforum.ru/cpp-beginners/thread939936.html
C++ Функция "возвращает" значение
Почему у этой функции не указан тип возвращаемого значения? template <class T> operator T () { return *((T *)m_p); } class any { void * m_p; public: template <class T> any( T...
C++ Не работает binary_search из STL
привет всем! какойто глюк или я что то не понимаю...применяю бинарный поиск из stl, и в итоге он не всегда правильно работает...пользуюсь компилятором g++ стандартом с++11...вот код int main() {...
C++ Нужно найти тему http://www.cyberforum.ru/cpp-beginners/thread939828.html
Даже не знаю как правильно спросить. Вот в векторе все элементы должны быть одного типа. А как называется вектор (или не вектор) в который можно записывать разные типы данных? На этом форуме тема...
C++ Создание типа данных для чисел определенного размера Здравствуйте. Столкнулся с проблемой работы с большими числами на разных архитектурах. На х64 размер long = 8. На х32 = 4. Мне нужно что бы на любой архитектуре гарантированно мой тип был 8 байт.... подробнее

Показать сообщение отдельно
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 121

Наследование от shared_ptr - C++

19.08.2013, 10:11. Просмотров 786. Ответов 1
Метки (Все метки)

Добрый день.
Подскажите вот какую вещь.
Сделал удобный для себя класс для ведения логов.
В нем переопределил operator<< след. образом:
C++
1
2
3
4
5
6
7
8
    template <class T>
    YacLog& operator<<(T inp)
    {
        TempStream.clear();
        TempStream << inp;
        toLog(defaultLevel,TempStream.str());
        return *this;
    };
Далее, т.к. этот класс будет агрегироваться в других классах, решил передавать его с помощью указателя shared_ptr<YacLog>.
Однако, для пущей удобности решил переопределить в shared_ptr метод operator<< что бы каждый раз не разыменовывать:

C++
1
2
3
4
5
6
7
8
9
class YacShared_ptr : public shared_ptr<YacLog>
{
    template <class S>
    YacShared_ptr& operator<<(S inp)
    {
        (*this) << inp;
        return *this;
    }
};
пытаюсь протестить это все хозяйство след. образом:

C++
1
2
3
4
5
6
7
8
#include "YacLog.h"
int main(void)
{
    YacShared_ptr tmp;
    tmp.reset(new YacLog("qwerty.log"));
    tmp << "asd" << 123456;
    return 0;
}
софтина зацикливается будто происходит рекурсивный вызов в этом месте:
C++
1
(*this) << inp;
Вопрос: что я сделал не так?
Спасибо.

p.s.
еще вопрос. Почему не получается создать экземпляр класса таким образом:
C++
1
YacShared_ptr tmp (new YacLog("qwerty.log"));
пишет следующее:
Код
1>d:\vs cpp projects\testlog\testlog\main.cpp(8): error C2664: 'YacShared_ptr::YacShared_ptr(const YacShared_ptr &)' : cannot convert parameter 1 from 'YacLog *' to 'const YacShared_ptr &'
1>          Reason: cannot convert from 'YacLog *' to 'const YacShared_ptr'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru