Такая мысль тоже приходила мне в голову, но повторюсь — какой практический смысл? Я тут тоже придумал нечто, возможно работает не всегда. Проверял на VS Net 2003. Там type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr...
Здравствуйте, Аноним, Вы писали:
А>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>ну это уже чистой воды надувательство
И вовсе не надувательство. И работает не во время компиляции, а во время исполнения.
Здравствуйте, 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()
так даже твой пример будет компилироваться :)
потому что единственное применение этой технике, которое я вижу, — для макросов, которые хотят контролировать свои параметры на входе, дабы им не подсунули бяку
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>потому что единственное применение этой технике, которое я вижу...
я уже говорил, что применять я это не собираюсь, просто спортивный интересс, так сказать-с
Здравствуйте, Аноним, Вы писали:
>Там type_info.name() для пользовательских типов возвращает строки вида "class ClassName" или "enum EnumName", так что strstr
не стал бы я полагаться на вид строки возвращаемой type_info.name().
это не переносимо.
Здравствуйте, 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, Вы писали:
J>что значит "правильно работать" в отсутствии четко поставленной задачи?
хочу макрос(так как ничего другого не выйдет), такой чтобы:
-имел имя ISTYPE
-имел один параметр(тип или значение)
-успешно компилировался как для переданного типа так и для переданного значения
-"возвращал" true, если переданное значение тип и false для значений
-результат можно было бы использовать как на этапе запуска, так и на этапе компиляции
J>сейчас придет Шахтер и тебя закопает как злостного теоретика
я ведь только за , в том смысле, что меня бы вполне устроил ответ "НЕТ. НИЗЯ ТАК!!!", естественно чем-то подкрепленный
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, jazzer, Вы писали:
J>>что значит "правильно работать" в отсутствии четко поставленной задачи?
ssm>хочу макрос(так как ничего другого не выйдет), такой чтобы: ssm>-имел имя ISTYPE ssm>-имел один параметр(тип или значение) ssm>-успешно компилировался как для переданного типа так и для переданного значения ssm>-"возвращал" true, если переданное значение тип и false для значений ssm>-результат можно было бы использовать как на этапе запуска, так и на этапе компиляции
На первый взгляд — общего решения нет.
Если я не ошибаюсь, единственное место куда пролезет
любая переменная и любой тип — typeid.
Но то, что он возвращает — implementation dependant.
К тому же с compile time тут проблемы
А что должен возвращать твой ISTYPE в таком случае: