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

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

Восстановить пароль Регистрация
 
Yacudzer
3 / 3 / 2
Регистрация: 06.07.2012
Сообщений: 107
19.08.2013, 10:11     Наследование от shared_ptr #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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 10:11     Наследование от shared_ptr
Посмотрите здесь:

C++ shared_ptr и vector
shared_ptr с потомками C++
shared_ptr валится C++
C++ Shared_ptr
Weak_ptr и shared_ptr C++
C++ Использование shared_ptr
Реализация shared_ptr C++
C++ Найти причины ошибок времени компиляции внутри класса, генерируемого фабричной функцией

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.08.2013, 10:30     Наследование от shared_ptr #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;
Yandex
Объявления
19.08.2013, 10:30     Наследование от shared_ptr
Ответ Создать тему
Опции темы

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