traits: is_istreamable, is_ostreamable
От: Аноним  
Дата: 21.10.05 09:34
Оценка:
Добрый день.

Как бы написать такой traits класс?

Т.е. is_ostreamable<T>::value == true, если есть

basic_ostream<K, CT> & operator << (basic_ostream<K, CT> &, const T &) (т.е. без преобразований)

и is_istreamable<T>::value == true, если есть

basic_istream<K, CT> & operator >> (basic_istream<K, CT> &, const T &) (т.е. без преобразований)

а то ума не приложу как тут SFINAE применить (или что-нибудь еще)

Спасибо.
Re: traits: is_istreamable, is_ostreamable
От: MaximE Великобритания  
Дата: 21.10.05 09:38
Оценка: 15 (1)
On Fri, 21 Oct 2005 13:34:42 +0400, Аноним <0@users.rsdn.ru> wrote:

http://groups.google.com/group/comp.lang.c++.moderated/msg/8235a058359911dc

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 2.0 beta
Re[2]: traits: is_istreamable, is_ostreamable
От: Pavel Chikulaev Россия  
Дата: 21.10.05 09:58
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>http://groups.google.com/group/comp.lang.c++.moderated/msg/8235a058359911dc

Кстати а зачем лишний нэймспейс is_left_shiftable_ и в бусте например noncopyable_ ?
Re[3]: traits: is_istreamable, is_ostreamable
От: MaximE Великобритания  
Дата: 21.10.05 13:58
Оценка:
On Fri, 21 Oct 2005 13:58:53 +0400, Pavel Chikulaev <39728@users.rsdn.ru> wrote:

> Кстати а зачем лишний нэймспейс is_left_shiftable_ и в бусте например noncopyable_ ?


namespace noncopyable_  // protection from unintended ADL


--
Maxim Yegorushkin
Posted via RSDN NNTP Server 2.0 beta
Re[4]: traits: is_istreamable, is_ostreamable
От: Pavel Chikulaev Россия  
Дата: 21.10.05 14:02
Оценка:
Здравствуйте, MaximE, Вы писали:

>> Кстати а зачем лишний нэймспейс is_left_shiftable_ и в бусте например noncopyable_ ?


ME>
ME>namespace noncopyable_  // protection from unintended ADL
ME>

А подробнее? что такое ADL я знаю Но все-таки?
Re[5]: traits: is_istreamable, is_ostreamable
От: crable США  
Дата: 22.10.05 13:01
Оценка: 41 (3) +1
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>Здравствуйте, MaximE, Вы писали:


>>> Кстати а зачем лишний нэймспейс is_left_shiftable_ и в бусте например noncopyable_ ?


ME>>
ME>>namespace noncopyable_  // protection from unintended ADL
ME>>

PC>А подробнее? что такое ADL я знаю Но все-таки?

Посмотри как работает ADL в этом случае:
#include <iostream>
// Попробуй скомпилировать как есть, а потом расккоментировав следующую строку
//#define PROTECT_FROM_ADL 1
namespace nm {
#ifdef PROTECT_FROM_ADL
        namespace A_ {
#endif
        struct A
        {
        };
#ifdef PROTECT_FROM_ADL
        }
        using A_::A;
#endif
        template <typename T>
        void f(const T &) {}
}

struct B: public nm::A
{
};

int main()
{
        B b;
        f(b);
}
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[5]: traits: is_istreamable, is_ostreamable
От: Аноним  
Дата: 22.10.05 17:59
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:
> что такое ADL я знаю

Я не знаю, может расскажеш
Re[6]: traits: is_istreamable, is_ostreamable
От: Кодт Россия  
Дата: 22.10.05 22:02
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Pavel Chikulaev, Вы писали:

>> что такое ADL я знаю

А>Я не знаю, может расскажеш


Argument-dependent lookup, он же Koenig lookup (поиск идентификаторов им. А.Кёнига, поиск в зависимости от аргументов).

Когда компилятор встречает вызов функции с неквалифицированным именем, например foo(x,y,z) а не SomeNS::foo(x,y,z) — он пытается отыскать её
— в текущем scope, начиная от самого узкого (например, среди методов класса, из метода которого она вызвана) вплоть до глобального пространства имён
— в пространствах имён, к которым принадлежат типы аргументов этого вызова.
Последнее и называется ADL.

Например, инфиксная запись оператора — x+y (сравни с функциональной: operator+(x,y)) это всегда неквалифицированное имя. В этом случае будут рассмотрены глобальное пространство и пространства, в которых определены типы x и y.
Перекуём баги на фичи!
Re[6]: traits: is_istreamable, is_ostreamable
От: Кодт Россия  
Дата: 22.10.05 22:11
Оценка:
Здравствуйте, crable, Вы писали:

>>>> Кстати а зачем лишний нэймспейс is_left_shiftable_ и в бусте например noncopyable_ ?

ME>>>namespace noncopyable_  // protection from unintended ADL

PC>>А подробнее? что такое ADL я знаю Но все-таки?
C>Посмотри как работает ADL в этом случае:

Да, интересно. А кроме перестраховочной роли, он там (в is_left_shiftable) пригождается? Как-то отсекает неверные варианты?..
Я что-то не смог придумать, где бы это аукнулось.
Перекуём баги на фичи!
Re[7]: traits: is_istreamable, is_ostreamable
От: MaximE Великобритания  
Дата: 23.10.05 07:42
Оценка: 24 (2)
Здравствуйте, Кодт, Вы писали:

[]

К>Argument-dependent lookup, он же Koenig lookup (поиск идентификаторов им. А.Кёнига, поиск в зависимости от аргументов).


Koenig lookup работал только для операторов. Более общая версия, которая работает не только с операторами, и есть ADL.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.