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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 121
#1

Наследование от 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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 10:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование от shared_ptr (C++):

Shared_ptr - C++
Всем хай. Есть некий класс и в нём такой метод: class Base { public: std::shared_ptr&lt;Base&gt; get_ptr() { ...

Allocator и shared_ptr - C++
Прокомментируйте пожалуйста. Есть ли смысл и вообще возможность оформлять зарезервированную память allocator-ом в shared_ptr? Или это...

shared_ptr с потомками - C++
Добрый вечер, сейчас столкнулся с задачей хранить большие объемы динамически-выделенной памяти. Обычный массив Base* list не подходит, т.к....

shared_ptr и vector - C++
почему в vector нельзя засунуть shared_ptr ? ...

Реализация shared_ptr - C++
Добрый день. Реализовал shared_ptr(), но если больше 2 перемен он не правильно работает. Что я не правильно делаю и как правильно ...

shared_ptr валится - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; #include &quot;boost/shared_ptr.hpp&quot; class One { public: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2013, 10:30 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Yacudzer Посмотреть сообщение
C++
1
(*this) << inp;
Гм. Рекурсия же явная. Должно быть два разыменования, если на то пошло.

Добавлено через 2 минуты
Цитата Сообщение от Yacudzer Посмотреть сообщение
C++
1
YacShared_ptr tmp (new YacLog("qwerty.log"));
Где конструкторы для YacShared_ptr? Родительского класса то не в области видимости. Раз юзаем С++11 то можно дописать в классе

C++
1
using shared_ptr<YacLog>::shared_ptr;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 10:30
Привет! Вот еще темы с ответами:

Использование shared_ptr - C++
std::shared_ptr&lt;int&gt; sp(new int); sp = 12; std::cout &lt;&lt; sp; Расшареному указателю нельзя присваивать стандартные...

Weak_ptr и shared_ptr - C++
Спасибо что зашли в эту тему и уделили мне время. Недавно увидел статью (не реклама) http://habrahabr.ru/post/191018/ Есть такой...

This для shared_ptr - C++
Как создать объект shared_ptr, в котором будет лежать this?

Как воспользоваться shared_ptr? - C++
Мне нужно вернуть shared_ptr из сией ф-ции Tovar* createTovar(string s,string s1) { return new Office(s,s1); } Как это...


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

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

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