Конечно. Вам нужен контекст, который разрешает расширение пакета - простой является скоординированным списком инициализаторов, который также имеет преимущество для оценки слева направо:
using expander = int[];
(void) expander { 0, ((void) As::id(), 0)... };
...
расширяет узор слева от него; в этом случае шаблон является выражением ((void) As::id(), 0)
. ,
в выражении является оператором запятой, который оценивает первый операнд, отбрасывает результат, затем оценивает второй операнд и возвращает результат. (void)
, установленная на As::id()
, существует для защиты от перегрузки operator,
и может быть опущена, если вы уверены, что ни один из вызовов As::id()
не вернет то, что перегружает запятую. 0
в правой части оператора запятой состоит в том, что expander
представляет собой массив из int
s, поэтому все выражение (которое используется для инициализации элемента массива) должно оцените int
. 0
гарантирует, что мы не пытаемся создать недопустимый массив 0-размера, когда As
является пустым пакетом. Demo .
В C ++ 17 (если повезет), все тело C::id
можно заменить на двоичным сглаживанием : (A::id(), ... , (void) As::id());
Демонстрация .
< % = %> является эквивалентом выполнения Ответа. Запишите ("") везде, куда Вы помещаете его.
< % # %> для Привязки данных и может только использоваться, где привязка данных поддерживается (можно использовать их на уровне страницы вне управления при вызове Page. DataBind () в Вашем codebehind)
Выражений привязки данныхСуществует несколько различного 'молозива':
<%@
- директива <%$
страницы - доступ ресурса <%=
- явный вывод к странице <%#
- привязке данных <%--
- серверный блок комментария , Также новый в ASP.Net 4:
<%:
- выписывает к странице, но с HTML закодировал Также новый в ASP.Net 4.5:
<%#:
- HTML закодировал привязку данных Вот большое сообщение в блоге Dan Crevier , который идет через тестовое приложение, которое он записал для показа различий.
В сущности: