В настоящее время я пишу библиотеку редактирования памяти C ++, а для API чтения / записи я использую черты типа (std :: is_pod, std :: is_same) и boost :: enable_if для предоставления 3 перегрузки:
Перегрузки 2 и 3 являются просто «оболочками» для перегрузки 1. (Так что, если вы чтение std :: vector или std :: basic_string, а T не POD, он завершится ошибкой, как и должно.)
Недавно я хотел использовать std :: array для множества операций чтения и записи, потому что я знал размер данные, которые я хотел прочитать и записать во время компиляции (я писал оболочку для формата PE-файла).
Я написал код для использования std :: array, а затем намеревался добавить еще одну перегрузку для обнаружения и обработки std :: array, но я случайно нажал на компиляцию, и, к моему удивлению, это сработало!
I ' m в настоящее время использует MSVC 10, и оказывается, что для std :: array, если T - POD, то std :: array - POD. (Это означает, что я могу просто использовать перегрузку 1, и она работает.)
Мой вопрос в том, гарантируется ли это стандартом C ++ или оставлено на усмотрение реализации.
Я знаю, что могу проверить стандарт сам, но я не делаю этого. Я не доверяю себе настолько, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)
Спасибо
Код PS доступен здесь (это библиотека только для заголовков): Я доверяю себе настолько же, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)
Спасибо
Код PS доступен здесь (это библиотека только для заголовков): Я доверяю себе настолько же, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)
Спасибо
Код PS доступен здесь (это библиотека только для заголовков): http://code.google.com/p/hadesmem/source/browse/trunk/HadesMem-v2/Hades-Memory/Hades-Memory/MemoryMgr.h#86