Re[3]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 12:55
Оценка: :))
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Я думаю, все эти книги он читал и его интересует, как сабж реализовать на С++.

Ну так в Шаблонах все написано! Прям набиваешь — и работает!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: ISTYPE?
От: jazzer Россия Skype: enerjazzer
Дата: 18.10.04 14:08
Оценка: 7 (1)
Здравствуйте, ssm, Вы писали:

ssm>можно реализовать ISTYPE, так чтобы :


ssm>
ssm>int i;
ssm>ASSERT(ISTYPE(int) == true);
ssm>ASSERT(ISTYPE(i) == false);
ssm>ASSERT(ISTYPE(MyClass) == true);
ssm>ASSERT(ISTYPE(MyClass()) == false);

ssm>


ssm>использовать я его несобираюсь :) , просто интерестна возможность реализации данного механизма средствами C++


раз уж все так веселятся:
template <class T> void NONTYPE(const T&) {}
#define ISTYPE(T) void f(T t);

class MyClass {};
int main()
{
    int i;
    ISTYPE(int);
    NONTYPE(int());
    NONTYPE(i);
    ISTYPE(MyClass);
    NONTYPE(MyClass());
}

если написать не то — не скомпилируется
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: Первый аноним
От: Аноним  
Дата: 18.10.04 14:50
Оценка: :)
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, Аноним, Вы писали:



А>>И вовсе не надувательство. И работает не во время компиляции, а во время исполнения.


ssm>оно не работает вообще:


ssm>
ssm>int x;    
ssm>std::cout << IS_TYPE(int) << IS_TYPE(x) << std::endl;


ssm>int i;    
ssm>std::cout << IS_TYPE(int) << IS_TYPE(i) << std::endl;
ssm>


Я бы не сказал, что прям вообще, хотя и не всегда . Не работает еще и с typedef, типа LPSTR. Но уж развлекаться, так развлекаться.
Re[5]: ISTYPE?
От: jazzer Россия Skype: enerjazzer
Дата: 19.10.04 07:03
Оценка: :)
Здравствуйте, ssm, Вы писали:

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


J>>тогда

J>>
#define ISTYPE(x)


J>>компилироваться точно будет :)

ssm>но не будет правильно работать :)

что значит "правильно работать" в отсутствии четко поставленной задачи?

J>>раз ты это все равно использовать не собираешься :)

ssm>интересен факт возможности реализации

J>>или:

J>>
J>>struct X
J>>{
J>>   bool operator==(bool) { return true; }
J>>};
J>>inline X f() { X x; return x; }
J>>#define ISTYPE(x) f()
J>>



J>>так даже твой пример будет компилироваться :)

ssm>чет я не понял, к чему этот пример вообще? может ты имел в виду
ssm>
ssm>operator bool()
ssm>

ssm>но смысл остается для меня все равно загадкой :xz:
нет, именно так.
Это чтобы работали выражения ISTYPE(x)==false.
Если operator bool() — тогда придется что-то возвращать, а оно может дать и другой резльтат при сравнении с false.

J>>потому что единственное применение этой технике, которое я вижу...

ssm>я уже говорил, что применять я это не собираюсь, просто спортивный интересс, так сказать-с

сейчас придет Шахтер и тебя закопает как злостного теоретика :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
ISTYPE?
От: ssm Россия  
Дата: 18.10.04 12:32
Оценка:
можно реализовать ISTYPE, так чтобы :

int i;
ASSERT(ISTYPE(int) == true);
ASSERT(ISTYPE(i) == false);
ASSERT(ISTYPE(MyClass) == true);
ASSERT(ISTYPE(MyClass()) == false);


использовать я его несобираюсь , просто интерестна возможность реализации данного механизма средствами C++
Re: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 12:38
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>можно реализовать ISTYPE, так чтобы :


ssm>
ssm>int i;
ssm>ASSERT(ISTYPE(int) == true);
ssm>ASSERT(ISTYPE(i) == false);
ssm>ASSERT(ISTYPE(MyClass) == true);
ssm>ASSERT(ISTYPE(MyClass()) == false);

ssm>


ssm>использовать я его несобираюсь , просто интерестна возможность реализации данного механизма средствами C++

1. RTTI, если при выполнении
2. Александреску — на этапе трансляции
3. Джоссатис, Вандевурд. Шаблоны в С++ — очень подробно написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: ISTYPE?
От: Lorenzo_LAMAS  
Дата: 18.10.04 12:52
Оценка:
Я думаю, все эти книги он читал и его интересует, как сабж реализовать на С++.
Of course, the code must be complete enough to compile and link.
Re[2]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 12:52
Оценка:
Здравствуйте, LaptevVV, Вы писали:

ssm>>использовать я его несобираюсь , просто интерестна возможность реализации данного механизма средствами C++

LVV>1. RTTI, если при выполнении

причем тут RTTI? единственный существующий оператор, которому пофиг что принимать на вход(тип или значение) это sizeof, но он тут врядли поможет...

LVV>2. Александреску — на этапе трансляции


нет там ничего подобного

LVV>3. Джоссатис, Вандевурд. Шаблоны в С++ — очень подробно написано.


знаю, но см. выше
Re[3]: ISTYPE?
От: Lorenzo_LAMAS  
Дата: 18.10.04 12:54
Оценка:
Я думаю, все это в таком виде как ты хочешь, сегодня не реализуемо. Хорошо, елси ошибаюсь
Of course, the code must be complete enough to compile and link.
Re[3]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 12:56
Оценка:
Здравствуйте, ssm, Вы писали:

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


ssm>>>использовать я его несобираюсь , просто интерестна возможность реализации данного механизма средствами C++

LVV>>1. RTTI, если при выполнении

ssm>причем тут RTTI? единственный существующий оператор, которому пофиг что принимать на вход(тип или значение) это sizeof, но он тут врядли поможет...

Ну, можно ведь ваш Assert реализовать как выполняющийся при выполнении

LVV>>2. Александреску — на этапе трансляции


ssm>нет там ничего подобного

Ну да, а классификация типов!

LVV>>3. Джоссатис, Вандевурд. Шаблоны в С++ — очень подробно написано.

ssm>знаю, но см. выше
Тоже — смотрите классификацию типов.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: ISTYPE?
От: Lorenzo_LAMAS  
Дата: 18.10.04 12:58
Оценка:
L_L>>Я думаю, все эти книги он читал и его интересует, как сабж реализовать на С++.
LVV>Ну так в Шаблонах все написано! Прям набиваешь — и работает!

Вы уверены? Не сочтите за труд дать точную ссылочку, пожалуйста
Of course, the code must be complete enough to compile and link.
Re[4]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 13:03
Оценка:
Здравствуйте, LaptevVV, Вы писали:

ssm>>нет там ничего подобного

LVV>Ну да, а классификация типов!


LVV>>>3. Джоссатис, Вандевурд. Шаблоны в С++ — очень подробно написано.

ssm>>знаю, но см. выше
LVV>Тоже — смотрите классификацию типов.

Да какая классификация типов к чертовой бабушке???
мне тип от значения отличить надобно
Re[4]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 13:05
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Я думаю, все это в таком виде как ты хочешь, сегодня не реализуемо.Хорошо, елси ошибаюсь



я вот две ночи заснуть нормально не мог , все мысль гуляла, как бы это сделать. прошу о помощи, так как сегодня охото больно поспать
Re: ISTYPE?
От: Аноним  
Дата: 18.10.04 13:23
Оценка:
Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла. Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.
Re[5]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 13:31
Оценка:
Здравствуйте, ssm, Вы писали:

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


ssm>>>нет там ничего подобного

LVV>>Ну да, а классификация типов!
ssm>

LVV>>>>3. Джоссатис, Вандевурд. Шаблоны в С++ — очень подробно написано.

ssm>>>знаю, но см. выше
LVV>>Тоже — смотрите классификацию типов.

ssm>Да какая классификация типов к чертовой бабушке???

ssm>мне тип от значения отличить надобно
А-А-А-А-А-А!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Интересно — надо подумать! На первый взгляд, нерешаемо.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 13:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла. Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.

Особенно со встроенными
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: ISTYPE?
От: Аноним  
Дата: 18.10.04 13:38
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Аноним, Вы писали:


А>>Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла. Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.

LVV>Особенно со встроенными

Да и с "невстроенным" тоже. Правда в С++ для .NET возможно, что-то и можно сделать, но, подозреваю, ssm интересует общий случай.
Re[4]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 13:41
Оценка:
Здравствуйте, Аноним, Вы писали:

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


LVV>>Здравствуйте, Аноним, Вы писали:


А>>>Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла. Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.

LVV>>Особенно со встроенными

А>Да и с "невстроенным" тоже. Правда в С++ для .NET возможно, что-то и можно сделать, но, подозреваю, ssm интересует общий случай.

Имхо, надо делать над С++ большую надстройку, где как раз и реализовывать, собственно работу с типами. А в бусте нет ничего?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: ISTYPE?
От: Аноним  
Дата: 18.10.04 13:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Аноним, Вы писали:


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


LVV>>>Здравствуйте, Аноним, Вы писали:


А>>>>Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла. Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.

LVV>>>Особенно со встроенными

А>>Да и с "невстроенным" тоже. Правда в С++ для .NET возможно, что-то и можно сделать, но, подозреваю, ssm интересует общий случай.

LVV>Имхо, надо делать над С++ большую надстройку, где как раз и реализовывать, собственно работу с типами. А в бусте нет ничего?

Имхо не надо ничего делать, а то Смолток (или Ява) получится .
Re[2]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 13:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я думаю, ключевая фраза здесь ".. использовать не собираюсь". В таких assert'ах нет смысла.


интересно пощупать реализацию, если вообще это можно реализовать

А>Тип в С++ существует только во время компиляции. Во время исполнения типов нет, поэтому делать с ними что-либо во время исполнения невозможно.


я не говорил, что задача должна решаться в рантайме
Re[6]: ISTYPE?
От: LaptevVV Россия  
Дата: 18.10.04 13:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>Да и с "невстроенным" тоже. Правда в С++ для .NET возможно, что-то и можно сделать, но, подозреваю, ssm интересует общий случай.

LVV>>Имхо, надо делать над С++ большую надстройку, где как раз и реализовывать, собственно работу с типами. А в бусте нет ничего?

А>Имхо не надо ничего делать, а то Смолток (или Ява) получится .

Ну, да, конечно! То есть, если сборку мусора надстроить, то в ней можно все типы отслеживать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Другой аноним
От: Аноним  
Дата: 18.10.04 13:55
Оценка:
А при чем тут сборка мусора?
Re[8]: Другой аноним
От: LaptevVV Россия  
Дата: 18.10.04 13:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А при чем тут сборка мусора?

А все перменные сделать динамическими — без исключений. Тогда и с типами легко разбираться, так как можно будет дескриптор хранить.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 14:17
Оценка:
Здравствуйте, jazzer, Вы писали:


J>раз уж все так веселятся:


не-не-не, должно компилироваться в обоих случаях
Re[2]: Первый аноним
От: Аноним  
Дата: 18.10.04 14:18
Оценка:
Здравствуйте, jazzer, Вы писали:

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


ssm>>можно реализовать ISTYPE, так чтобы :


ssm>>
ssm>>int i;
ssm>>ASSERT(ISTYPE(int) == true);
ssm>>ASSERT(ISTYPE(i) == false);
ssm>>ASSERT(ISTYPE(MyClass) == true);
ssm>>ASSERT(ISTYPE(MyClass()) == false);

ssm>>


ssm>>использовать я его несобираюсь , просто интерестна возможность реализации данного механизма средствами C++


J>раз уж все так веселятся:

J>
J>template <class T> void NONTYPE(const T&) {}
J>#define ISTYPE(T) void f(T t);

J>class MyClass {};
J>int main()
J>{
J>    int i;
J>    ISTYPE(int);
J>    NONTYPE(int());
J>    NONTYPE(i);
J>    ISTYPE(MyClass);
J>    NONTYPE(MyClass());
J>}
J>

J>если написать не то — не скомпилируется

Такая мысль тоже приходила мне в голову, но повторюсь — какой практический смысл? Я тут тоже придумал нечто, возможно работает не всегда. Проверял на VS Net 2003. Там type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr...

#define STRINGIZING(name) #name
#define STRINGIZING_(name) STRINGIZING(name)

#define IS_TYPE(t) (strstr(typeid(t).name(),STRINGIZING_(t))!=0)

Использовать так же, как хотел ssm, т.е.

ASSERT(ISTYPE(int) == true);
Re[3]: Первый аноним
От: ssm Россия  
Дата: 18.10.04 14:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr...


ну это уже чистой воды надувательство
Re[4]: Первый аноним
От: Аноним  
Дата: 18.10.04 14:32
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, Аноним, Вы писали:


А>>type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr...


ssm>ну это уже чистой воды надувательство


И вовсе не надувательство. И работает не во время компиляции, а во время исполнения.
Re[3]: ISTYPE?
От: jazzer Россия Skype: enerjazzer
Дата: 18.10.04 14:33
Оценка:
Здравствуйте, ssm, Вы писали:

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



J>>раз уж все так веселятся:

ssm> :))
ssm>не-не-не, должно компилироваться в обоих случаях

тогда
#define ISTYPE(x)


компилироваться точно будет :)
раз ты это все равно использовать не собираешься :)

или:
struct X
{
   bool operator==(bool) { return true; }
};
inline X f() { X x; return x; }
#define ISTYPE(x) f()



так даже твой пример будет компилироваться :)


потому что единственное применение этой технике, которое я вижу, — для макросов, которые хотят контролировать свои параметры на входе, дабы им не подсунули бяку
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Первый аноним
От: ssm Россия  
Дата: 18.10.04 14:40
Оценка:
Здравствуйте, Аноним, Вы писали:


А>И вовсе не надувательство. И работает не во время компиляции, а во время исполнения.


оно не работает вообще:

int x;    
std::cout << IS_TYPE(int) << IS_TYPE(x) << std::endl;


int i;    
std::cout << IS_TYPE(int) << IS_TYPE(i) << std::endl;
Re[4]: ISTYPE?
От: ssm Россия  
Дата: 18.10.04 15:03
Оценка:
Здравствуйте, jazzer, Вы писали:

J>тогда

J>
#define ISTYPE(x)


J>компилироваться точно будет

но не будет правильно работать

J>раз ты это все равно использовать не собираешься

интересен факт возможности реализации

J>или:

J>
J>struct X
J>{
J>   bool operator==(bool) { return true; }
J>};
J>inline X f() { X x; return x; }
J>#define ISTYPE(x) f()
J>



J>так даже твой пример будет компилироваться

чет я не понял, к чему этот пример вообще? может ты имел в виду
operator bool()

но смысл остается для меня все равно загадкой

J>потому что единственное применение этой технике, которое я вижу...

я уже говорил, что применять я это не собираюсь, просто спортивный интересс, так сказать-с
Re[3]: Первый аноним
От: korzhik Россия  
Дата: 18.10.04 15:22
Оценка:
Здравствуйте, Аноним, Вы писали:

>Там type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr


не стал бы я полагаться на вид строки возвращаемой type_info.name().
это не переносимо.
Re[6]: ISTYPE?
От: ssm Россия  
Дата: 19.10.04 08:40
Оценка:
Здравствуйте, jazzer, Вы писали:

J>что значит "правильно работать" в отсутствии четко поставленной задачи?


хочу макрос(так как ничего другого не выйдет), такой чтобы:
-имел имя ISTYPE
-имел один параметр(тип или значение)
-успешно компилировался как для переданного типа так и для переданного значения
-"возвращал" true, если переданное значение тип и false для значений
-результат можно было бы использовать как на этапе запуска, так и на этапе компиляции


J>сейчас придет Шахтер и тебя закопает как злостного теоретика

я ведь только за , в том смысле, что меня бы вполне устроил ответ "НЕТ. НИЗЯ ТАК!!!", естественно чем-то подкрепленный
Re[7]: ISTYPE?
От: e-Xecutor Россия  
Дата: 20.10.04 07:20
Оценка:
Здравствуйте, ssm, Вы писали:

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


J>>что значит "правильно работать" в отсутствии четко поставленной задачи?


ssm>хочу макрос(так как ничего другого не выйдет), такой чтобы:

ssm>-имел имя ISTYPE
ssm>-имел один параметр(тип или значение)
ssm>-успешно компилировался как для переданного типа так и для переданного значения
ssm>-"возвращал" true, если переданное значение тип и false для значений
ssm>-результат можно было бы использовать как на этапе запуска, так и на этапе компиляции


На первый взгляд — общего решения нет.

Если я не ошибаюсь, единственное место куда пролезет
любая переменная и любой тип — typeid.
Но то, что он возвращает — implementation dependant.
К тому же с compile time тут проблемы

А что должен возвращать твой ISTYPE в таком случае:
struct S{
};

struct S S;

ISTYPE(S); //???




(true+false)/2
Re[8]: ISTYPE?
От: ssm Россия  
Дата: 20.10.04 07:58
Оценка:
Здравствуйте, e-Xecutor, Вы писали:


EX>(true+false)/2

EX>
неа, если ты передал первое S, то true, если второе, то false.
кстати:

struct S{
    int i;
};

struct P{
    int i[2];
};

struct S P;
struct P S;

int main()
{        
    std::cout << sizeof(P) << sizeof(S);

    return 0;
}

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.