См. также:
для Microsoft Visual C:
http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs. 80% 29.aspx
и GCC утверждают совместимость с компилятором Microsoft .:
http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking -Pragmas.html
В дополнение к предыдущим ответам, обратите внимание, что независимо от упаковки в C ++ нет гарантий-распоряжений-членов. Компиляторы могут (и, конечно же, делать) добавлять в структуру элементов виртуальной таблицы и базовых структур. Даже существование виртуальной таблицы не обеспечивается стандартом (реализация виртуального механизма не указана), и поэтому можно сделать вывод, что такая гарантия просто невозможна.
Я вполне уверен, что порядок членов является гарантировано в C, но я не стал бы рассчитывать на это, когда писал кросс-платформенную или кросс-компиляторную программу.
Смотрите на реализацию MVC HandleErrorAttribute. Это возвращает ViewResult. Вы могли записать свою собственную версию (HandleJsonErrorAttribute), который возвращает JsonResult.
Возможно, Вы могли создать свой собственный Атрибут и сделать, чтобы конструктор оценил, который берет перечисление значений View или Json. Ниже то, что я использую, чтобы пользовательский Атрибут полномочий продемонстрировал то, что я имею в виду. Таким образом, когда сбои аутентификации на json запрашивают это, отвечает json ошибкой и тем же с тем, если он возвращает Представление.
public enum ActionResultTypes
{
View,
Json
}
public sealed class AuthorizationRequiredAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public ActionResultTypes ActionResultType { get; set; }
public AuthorizationRequiredAttribute(ActionResultTypes actionResultType)
{
this.ActionResultType = ActionResultType;
}
}
//And used like
[AuthorizationRequired(ActionResultTypes.View)]
public ActionResult About()
{
}