powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / специализация шаблона для класса и потомков
11 сообщений из 11, страница 1 из 1
специализация шаблона для класса и потомков
    #38914528
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу перегрузить оператор << чтобы для всего он просто записывал во внутренний поток, а для потомков определенного класса делал кое-что другое

вот например

Код: plaintext
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.
#include <iostream>
#include <type_traits>

template<bool B, class T = void>
struct enable_if_not {};
template<class T>
struct enable_if_not<false, T> { typedef T type; };

class base {};
class child:public base{};
class stream {};

template<class T>
stream& operator << (stream& out, const typename enable_if_not<std::is_base_of<base,T>::value,T>::type& o) {
    std::cout << "some other: " << o << std::endl;
    return out;
}
stream& operator << (stream& out, const base& obj) {
    std::cout << "object was " << std::endl;
    return out;
}

int main() {
    stream out;
    base bo;
    child co;
    out << "hello" << 111ul << bo << std::string("co") << co;
}


я разные вариации такого подхода пробовал, пробовал внутренний оператор сделать, специализации, без const. никак. что не верно?
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38914563
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, парни, вроде работает :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
stream& operator << (stream& out, const base& obj) {
    std::cout << "object was " << std::endl;
    return out;
}
template<class T>
typename enable_if_not<std::is_base_of<base,T>::value,stream>::type& operator << (stream& out, const T& o) {
    std::cout << "some other: " << o << std::endl;
    return out;
}



то же работает и при встроенных операторах
блин! ночью страдал. утро вечера.. так сказать..

а может кто знает, как это же сделать, только что бы не городить свой тип, enable_if_not?
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38915137
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black, букв дохренища. Вроде задача простая. Распечатать или сериализовать объект... Не?
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38915655
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как проще? :)
если убрать enable_if_not то ничего работать не будет. только если приобразовывать к базовому классу кога пихаешь в поток.

это составной боъект и он должен, да, распечатываться :) но также должен хранить указатели на другие объекты своего типа и также их распечатывать.

ни в жизнь не догадаетесь для чего :P
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38915662
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackни в жизнь не догадаетесь для чего :P
AST?
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38915690
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это виджеты, они должны генерить html
определенный класс виджетов может другие содержать. если у него есть виджеты, которые он содержит, то ему нужно ими управлять, удалять например, передавать какие-то данные и т.д.
удобно было бы в него запихивать оператором << для потока, потому что для него определено много преобразований. то есть я могу одинм оператором все обрабатывать, удобно.
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38916096
locked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexy_blackэто виджеты, они должны генерить html
определенный класс виджетов может другие содержать. если у него есть виджеты, которые он содержит, то ему нужно ими управлять, удалять например, передавать какие-то данные и т.д.
удобно было бы в него запихивать оператором << для потока, потому что для него определено много преобразований. то есть я могу одинм оператором все обрабатывать, удобно.
Если это система виджетов то сериализация через одно место параметрический полиморфизм выглядит как пятая нога.
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38916664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Средство" оказалось более желанно чем "цель"...
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38917098
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockedЕсли это система виджетов то сериализация через одно место параметрический полиморфизм выглядит как пятая нога.

эм.. а чем?
например, я могу сделать так

Код: plaintext
1.
2.
3.
some_place << "вот первый виджет: " << some_widget << "&lt; br / &gt;";
for(int i=0;i<wcontainer.size();i++)
     some_place << "вот виджет номер " << i << ": " << wcontainer[i] << "&lt; br / &gt;";



блин, не знаю как поставить скобку, знаки с & не выводятся правильно, а если скобку поставить, получается тег :)
some_place - это какое-то определенное место на странице, которое представлено виджетом.
то есть я могу выводить данные в html и вставлять виджеты как мне надо. чем не подход? или как лучше если это не гуд?
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38917101
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя так можно подумать что легче сразу в поток записывать :)
просто виджеты несут некую нагрузку. я могу таким образом менять текст в нужном месте, могу подключать события (сделал специальный механизм для этог) могу указывать зависимости (чтобы когда какой-нибудь виджет включаешь нужные файлы добавлялись в head или загрузались на клиенте через websocket)
клиенту отдается не содержимое потока, а строка, где в нужных местах вставлены виджеты
...
Рейтинг: 0 / 0
специализация шаблона для класса и потомков
    #38918291
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о случайно наткнулся.

boost.org/libs/core

disable_if_c (в enable_if)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / специализация шаблона для класса и потомков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]