Здравствуйте, SergeyBi, Вы писали:
SB>Поиск не дал ответа. SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>Может есть что-то готовое?
А>нууу, если ты пишешь свой компилятор, то конечно можешь. А так — никак.
Хорошо, а если я ослаблю требование.
Можно ли отличить тип у которого есть указатель на таблицу вирт. функций от того у которого его нет(нет ни одной вирт функции не у него ни у любого предка).
Здравствуйте, SergeyBi, Вы писали:
SB>Поиск не дал ответа. SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>Может есть что-то готовое?
Здравствуйте, SergeyBi, Вы писали:
SB>Поиск не дал ответа. SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом.
Способа на все случаи жизни увы нет.
SB>Может есть что-то готовое?
Посмотри в сторону boost::type_traits.
Здравствуйте, SergeyBi, Вы писали:
А>>нууу, если ты пишешь свой компилятор, то конечно можешь. А так — никак.
SB>Хорошо, а если я ослаблю требование.
SB>Можно ли отличить тип у которого есть указатель на таблицу вирт. функций от того у которого его нет(нет ни одной вирт функции не у него ни у любого предка).
boost::is_polymorphic<T>
Любите книгу — источник знаний (с) М.Горький
Re[3]: POD тип, не POD тип ?
От:
Аноним
Дата:
06.09.04 09:09
Оценка:
SB>Можно ли отличить тип у которого есть указатель на таблицу вирт. функций от того у которого его нет(нет ни одной вирт функции не у него ни у любого предка).
Тут тебе буст насоветовали. Но, как я понимаю, по-настоящему 100% переносимого правильного решения нет — нужна поддержка со стороны компилятора.
Здравствуйте, SergeyBi, Вы писали:
SB>Поиск не дал ответа. SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>Может есть что-то готовое?
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, SergeyBi, Вы писали:
SB>>Поиск не дал ответа. SB>>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>>Может есть что-то готовое?
Все правильно. Только что бы ни у кого не было иллюзий что можно определить POD, нужно ссылку на boost::is_pod приводить с той заметкой которая там дана:
Without some (as yet unspecified) help from the compiler, is_pod will never report that a class or struct is a POD; this is always safe, if possibly sub-optimal.
If the compiler does not support partial-specialization of class templates, then this template can not be used with function types.
[]
> K>boost::is_pod<T> > > Все правильно. Только что бы ни у кого не было иллюзий что можно определить POD, нужно ссылку на boost::is_pod приводить с той заметкой которая там дана:
[offtopic]Кого интересуют иллюзии тех, кому лень читать документацию?![/offtopic]
Здравствуйте, MaximE, Вы писали:
ME>[offtopic]Кого интересуют иллюзии тех, кому лень читать документацию?![/offtopic]
[offtopic]Наверно не того кто придумывает is_pod который определяет нечто совсем другое, и не того кто вводит определение POD, которое имеет малое значения с практической точки зрения.[/offtopic]
Здравствуйте, MaximE, Вы писали:
ME>sergey_shandar wrote:
ME>[]
>> K>boost::is_pod<T> >> >> Все правильно. Только что бы ни у кого не было иллюзий что можно определить POD, нужно ссылку на boost::is_pod приводить с той заметкой которая там дана:
ME>[offtopic]Кого интересуют иллюзии тех, кому лень читать документацию?![/offtopic]
ME>-- ME>Maxim Yegorushkin
Название is_pod вводит в заблуждение. Лучше так не поступать. Интерфейс должен быть интуитивно-понятным. Если для работы с системой нужно прочитать тома документации на неё, значит эта система плохо спроектирована.
Здравствуйте, SergeyBi, Вы писали:
SB>Можно ли отличить тип у которого есть указатель на таблицу вирт. функций от того у которого его нет(нет ни одной вирт функции не у него ни у любого предка).
Если ассер нужен можно инициализацией проверить.
if(0)
{ T t={};
}
Можно добавить чет виртуальное и sizeof сравнить
struct TestPod
{ template <typename T>
struct Virtual: public T
{ virtual Virtual()=0;
};
teplate <typename T > static char (& Tst ()) [int(sizeof(Virtual<T>)==sizeof(T))+1];
};
Здравствуйте, SergeyBi, Вы писали:
SB>Поиск не дал ответа. SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>Может есть что-то готовое?
Посмотрите
Дэвид Вандевурд и Николай М. Джосаттис "Шабоны С++ справочник разработчика"
глава 19 описана разработка шаблона который позволяет определять различные свойства передаваемого ему типа в том числе является ли данный тип POD типом.
Здравствуйте, SergeyBi, Вы писали:
SB>Могу ли я как-то на этапе компиляции или выполнения определить является ли тип — POD типом. SB>Может есть что-то готовое?
Точный ответ "никак", но может быть ты скажешь зачем тебе такая возможность понадобилась и кто-нибудь сможет предложить обходной путь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
E>Точный ответ "никак", но может быть ты скажешь зачем тебе такая возможность понадобилась и кто-нибудь сможет предложить обходной путь?
Это было много лет назад. Я точно цели не помню. Кажктся я в академичесуих целях писал аналог sdt::vector и мне нужно было решить могу ли я ради оптимизации использовать memcpy или придется приминять почленное копирование. Что-то в этом роде...
Здравствуйте, SergeyBi, Вы писали:
SB>Это было много лет назад. Я точно цели не помню. Кажктся я в академичесуих целях писал аналог sdt::vector и мне нужно было решить могу ли я ради оптимизации использовать memcpy или придется приминять почленное копирование. Что-то в этом роде...
наличие таблицы виртуальных функций никак не помешает использовать memcpy Например sdt::vector, при простейших реализациях, ИМХО можно откопировать memcpy только тогда оригинал нужно забыть без деструктора
Здравствуйте, SergeyBi, Вы писали:
SB>Это было много лет назад. Я точно цели не помню. Кажктся я в академичесуих целях писал аналог sdt::vector и мне нужно было решить могу ли я ради оптимизации использовать memcpy или придется приминять почленное копирование. Что-то в этом роде...
упс, не заметил, что пост древний!
IMHO, тогда бы было хорошим решением позволить пользователю что-то специализировать или определять для своего типа, что включает оптимизацию, если она так уж нужна...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском