Как сделать ссылку на класс в С++
Как можно реализовать функцию getClassOf? И можно ли вообще?
Отслеживать
задан 2 июн 2021 в 9:28
Александр С Александр С
using Class_id = B; , но скорее всего Вам нужны шаблоны
2 июн 2021 в 9:33
А если значение надо будет поменять?
2 июн 2021 в 9:34
похоже Вы пытаетесь сделать фабрику.
2 июн 2021 в 9:39
¿А почему бы не написать просто B b; ? Из вопроса совершенно непонятно, где и как вам могла бы понадобится прослойка в виде Class_id , чем бы оно не было. Так что приводите более-менее полноценный пример использования. И заметьте, что С++ является языком со статической компиляцией и тип объекта b задается строго во время компиляции, а не во время выполнения.
2 июн 2021 в 9:40
Нельзя. В таком случае придется делать либо иерархию классов, наследующих от какого-то базового абстрактного типа и создавать объекты динамически (то бишь уже упомянутый паттерн фабрика), либо использовать ::std::variant или его аналоги. ЗЫ в предыдущем комментарии «со статической компиляцией» следует читать «со статической типизацией»
Управление ссылками в проекте
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Перед написанием кода для внешних компонентов или подключенных служб необходимо включить в проект ссылки на них. По сути, ссылка — это запись в файле проекта, которая содержит сведения, необходимые Visual Studio для поиска компонента или службы.
Добавление ссылки зависит от типа проекта для кода, над которым вы работаете:

-
Если узел зависимостей отображается вОбозреватель решений, можно использовать контекстное меню правой кнопкой мыши, чтобы выбрать пункт «Добавить ссылку на проект».
Вы также можете щелкнуть правой кнопкой мыши узел проекта и выбрать команду Добавить >ссылку на проект.

Если узел «Ссылки» отображается вОбозреватель решений, можно использовать контекстное меню правой кнопкой мыши, чтобы выбрать пункт «Добавить ссылку«.
Или щелкните правой кнопкой мыши узел проекта и выберите «Добавить >ссылку».
Вы можете добавить ссылку на следующие типы компонентов и служб:
- Библиотеки классов или сборки .NET
- приложения универсальной платформы Windows;
- компоненты COM
- другие сборки или библиотеки классов проектов в том же решении;
- Общие проекты
- веб-службы XML
Ссылки на приложения UWP
Универсальная платформа Windows (UWP) предоставляет общую платформу приложений для каждого устройства под управлением Windows. Сведения о создании приложения UWP см. в руководстве по созданию первого приложения универсальная платформа Windows в Visual Studio с помощью XAML и C#.
Ссылки на проекты
проекты универсальная платформа Windows (UWP) могут создавать ссылки на другие проекты UWP в решении или проекты Windows 8.1 или двоичные файлы, если эти проекты не используют API, которые не рекомендуется использовать в Windows 10 и более поздних версиях. Более подробную информацию см. в разделе Перенос приложения из среды выполнения Windows 8 в UWP.
Если вы решили изменить целевую платформу проектов Windows 8.1 на Windows 10 или более поздней версии, ознакомьтесь со статьей Перенос, миграция и обновление проектов Visual Studio.
Сведения о создании и создании нового приложения UWP для Windows 10 и Windows 11 см. в разделе «Выбор версии UWP».
Справочник по пакетам SDK расширений
Приложения Visual Basic, C#, C++ и JavaScript универсальная платформа Windows (UWP) могут ссылаться на пакеты SDK расширений, предназначенные для Windows 8.1, если эти пакеты SDK расширений не используют API, которые не рекомендуется использовать в Windows 10 и более поздних версиях. Проверьте сайт поставщика пакета SDK для расширений, чтобы узнать, можно ли ссылаться на него приложениями UWP.
Если вы определяете, что пакет SDK расширения, на который ссылается приложение, не поддерживается, необходимо выполнить следующие действия.
- Посмотреть имя проекта, который вызывает ошибку. Платформа, предназначенная для проекта, отмечена в скобках рядом с именем проекта. Например, MyProjectName (Windows 8.1) означает, что проект MyProjectName предназначен для платформы Windows 8.1.
- Перейдите на сайт поставщика неподдерживаемого пакета SDK расширений и установите версию пакета SDK расширений с зависимостями, совместимыми с версией платформы, для которой предназначен ваш проект.
Примечание. Один из способов узнать, имеет ли пакет SDK расширений зависимости от других пакетов SDK расширений, — воспользоваться диспетчером ссылок. Перезапустите Visual Studio, создайте проект приложения UWP на C#, а затем щелкните проект правой кнопкой мыши и выберите «Добавить ссылку«. Перейдите на вкладку Windows, а затем на вложенную вкладку Расширения. Выберите пакет SDK расширений. Посмотрите на правую панель в диспетчере ссылок. Если этот пакет имеет зависимости, они будут перечислены в этой панели.
Важно! Если проект предназначен исключительно для Windows 10 и установленный в предыдущем шаге пакет SDK расширений имеет зависимость от пакета среды выполнения Microsoft Visual C++, то совместимой с Windows 10 версией этого пакета является v14.0, которая устанавливается вместе с Visual Studio.
Добавление ссылки во время разработки
При создании ссылки на сборку в проекте Visual Studio ищет сборку в следующих расположениях:
- Каталог текущего проекта. (Можно найти эти сборки, используя вкладку Обзор .)
- Другие каталоги проектов в одном решении. (Вы можете найти эти сборки на вкладке Проекты .)
- Все проекты содержат неявную ссылку на библиотеку mscorlib.
- Все проекты содержат неявную ссылку на System.Core , даже если System.Core была удалена из списка ссылок.
- Проекты Visual Basic содержат неявную ссылку на Microsoft.VisualBasic.
Ссылки на общие компоненты во время выполнения
Во время выполнения компоненты должны быть в выходном пути проекта или в глобальном кэше сборок. Если проект содержит ссылку на объект, который не входит в одно из этих расположений, необходимо скопировать ссылку на выходной путь проекта при сборке проекта. Свойство CopyLocal указывает, следует ли делать копию. Если значение True, ссылка копируется в каталог проекта во время сборки проекта. Если значение равно False, ссылка не копируется.
При развертывании приложения, содержащего ссылку на пользовательский компонент, зарегистрированный в GAC, компонент не будет развернут с приложением независимо от CopyLocal параметра. В более ранних версиях Visual Studio можно было задать свойство CopyLocal ссылки, чтобы обеспечить развертывание сборки. Теперь необходимо вручную добавить сборку в папку \Bin. Это действие ставит весь пользовательский код под контроль, тем самым уменьшая риск публикации пользовательского кода, с которым вы не знакомы.
По умолчанию для свойства CopyLocal задается значение False , если сборка или компонент находится в глобальном кэше сборок или является компонентом платформы. В противном случае задается значение True. Ссылки проектов на проекты всегда имеют значение True.
Ссылка на проект или сборку, которые предназначены для другой версии .NET
Разработчики могут создавать приложения, которые ссылаются на проекты или сборки, предназначенные для другой версии платформы .NET. Например, вы можете создать приложение, предназначенное для .NET Framework 4.6 и ссылающееся на сборку, которая предназначена для .NET Framework 4.5. Если вы создаете проект, предназначенный для более ранней версии .NET, вы не можете задать ссылку в этом проекте или сборке, предназначенной для более новой версии.
Ссылки проектов на проекты
Ссылки проектов на проекты — это ссылки на проекты, которые содержат сборки. Вы добавляете их на вкладке Проекты диалогового окна «Диспетчер ссылок». Visual Studio может найти сборку, если задан путь к проекту.
При наличии проекта, создающего сборку, следует ссылаться на проект и не использовать ссылку на файл. Преимущество ссылки проекта на проект состоит в том, что она создает зависимость между проектами в системе сборки. Зависимый проект создается, если он изменился с момента последнего создания проекта ссылки. Ссылка на файл не создает зависимость сборки, поэтому можно создать проект ссылки, не создавая зависимый проект, и ссылка может стать устаревшей. (То есть проект может ссылаться на ранее созданную версию проекта.) Это может привести к тому, что в каталоге bin требуется несколько версий одной библиотеки DLL, что невозможно. При возникновении этого конфликта появится сообщение, например «Предупреждение: зависимость «файл» проекта «project» не может быть скопирована в каталог запуска, так как она перезаписывает ссылку «файл». Дополнительные сведения см. в разделе «Устранение неполадок с неисправными ссылками » и «Практическое руководство. Создание и удаление зависимостей проекта».
Ссылка на файл вместо ссылки проекта на проект создается, если целевая версия .NET Framework одного проекта — 4.5, а целевая версия другого проекта — 2, 3, 3.5 или 4.0.
Ссылки на общий проект
В отличие от большинства других типов проектов, общий проект не имеет двоичных выходных данных. Вместо этого код компилируется в каждый проект, который ссылается на него. Общие проекты позволяют создавать общий код, на который ссылается множество различных проектов приложений. Код компилируется как часть каждого ссылающегося проекта и может включать директивы компилятора, которые помогают внедрить функции конкретной платформы в общую базу кода. Добавьте ссылку на общий проект на вкладке Общие проекты диалогового окна «Диспетчер ссылок».
Ссылки на файлы
Ссылки на файлы — это прямые ссылки на сборки вне контекста проекта Visual Studio. Они создаются на вкладке Обзор диспетчера ссылок. Ссылку на файл следует использовать в случае, если имеется лишь сборка или компонент, но не проект, который создает ее в качестве выходных данных.
Связанный контент
- Диагностика неработающих ссылок
- Практическое руководство. Добавление и удаление ссылок
Практическое руководство. Создание связи с объектом или веб-страницей с помощью элемента управления LinkLabel в Windows Forms
Элемент управления Windows Forms LinkLabel позволяет создавать ссылки веб-типа в форме. После щелчка ссылки можно изменить ее цвет, чтобы указать, что по ссылке был выполнен переход. Дополнительные сведения об изменении цвета см. в статье Практическое руководство. Изменение внешнего вида элемента управления LinkLabel в Windows Forms.
Создание ссылки на другую форму
Создание ссылки на другую форму с помощью элемента управления LinkLabel
- Присвойте свойству Text соответствующую надпись.
- Задайте свойство LinkArea, чтобы определить, какая часть надписи будет указана в виде ссылки. Способ указания зависит от свойств, связанных с внешним видом метки ссылки. Значение LinkArea представлено объектом LinkArea, содержащим два числа — начальная позиция символа и количество символов. Свойство LinkArea можно задать в окне свойств или в коде следующим образом:
' In this code example, the link area has been set to begin ' at the first character and extend for eight characters. ' You may need to modify this based on the text entered in Step 1. LinkLabel1.LinkArea = New LinkArea(0, 8)
// In this code example, the link area has been set to begin // at the first character and extend for eight characters. // You may need to modify this based on the text entered in Step 1. linkLabel1.LinkArea = new LinkArea(0,8);
// In this code example, the link area has been set to begin // at the first character and extend for eight characters. // You may need to modify this based on the text entered in Step 1. linkLabel1->LinkArea = LinkArea(0,8);
Примечание. Экземпляр класса LinkLabelLinkClickedEventArgs содержит ссылку на элемент управления LinkLabel, который был нажат, поэтому выполнять приведение объекта sender не нужно.
Protected Sub LinkLabel1_LinkClicked(ByVal Sender As System.Object, _ ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) _ Handles LinkLabel1.LinkClicked ' Show another form. Dim f2 As New Form() f2.Show LinkLabel1.LinkVisited = True End Sub
protected void linkLabel1_LinkClicked(object sender, System. Windows.Forms.LinkLabelLinkClickedEventArgs e) < // Show another form. Form f2 = new Form(); f2.Show(); linkLabel1.LinkVisited = true; >
private: void linkLabel1_LinkClicked(System::Object ^ sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs ^ e) < // Show another form. Form ^ f2 = new Form(); f2->Show(); linkLabel1->LinkVisited = true; >
Связывание с веб-страницей
Элемент управления LinkLabel можно также использовать для отображения веб-страницы в браузере по умолчанию.
Запуск Internet Explorer и создание ссылки на веб-страницу с помощью элемента управления LinkLabel
- Присвойте свойству Text соответствующую надпись.
- Задайте свойство LinkArea, чтобы определить, какая часть надписи будет указана в виде ссылки.
- В обработчике событий LinkClicked в середине блока обработки исключений вызовите вторую процедуру, которая задает свойству LinkVisited значение true и использует метод Start для запуска браузера по умолчанию с URL-адресом. Чтобы использовать метод Start, необходимо добавить ссылку на пространство имен System.Diagnostics.
Важно! Если приведенный ниже код выполняется в среде с частичным доверием (например, на общем диске), при вызове метода VisitLink JIT-компилятор завершится сбоем. Инструкция System.Diagnostics.Process.Start вызывает запрос ссылки, который завершается сбоем. Перехватывая исключение при вызове метода VisitLink , приведенный ниже код гарантирует, что в случае сбоя JIT-компилятора ошибка будет обработана корректно.
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) _ Handles LinkLabel1.LinkClicked Try VisitLink() Catch ex As Exception ' The error message MessageBox.Show("Unable to open link that was clicked.") End Try End Sub Sub VisitLink() ' Change the color of the link text by setting LinkVisited ' to True. LinkLabel1.LinkVisited = True ' Call the Process.Start method to open the default browser ' with a URL: System.Diagnostics.Process.Start("http://www.microsoft.com") End Sub
private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) < try < VisitLink(); >catch (Exception ex ) < MessageBox.Show("Unable to open link that was clicked."); >> private void VisitLink() < // Change the color of the link text by setting LinkVisited // to true. linkLabel1.LinkVisited = true; //Call the Process.Start method to open the default browser //with a URL: System.Diagnostics.Process.Start("http://www.microsoft.com"); >
private: void linkLabel1_LinkClicked(System::Object ^ sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs ^ e) < try < VisitLink(); >catch (Exception ^ ex) < MessageBox::Show("Unable to open link that was clicked."); >> private: void VisitLink() < // Change the color of the link text by setting LinkVisited // to true. linkLabel1->LinkVisited = true; // Call the Process.Start method to open the default browser // with a URL: System::Diagnostics::Process::Start("http://www.microsoft.com"); >
См. также
- Process.Start
- Общие сведения об элементе управления LinkLabel
- Практическое руководство. Изменение внешнего вида элемента управления LinkLabel в Windows Forms
- Элемент управления LinkLabel
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Ссылка-якорь
Мы нашли отличную статью, для размещения в блоге. Но статья длинная, и чтобы работать с ней было удобно, хорошо бы добавить к ней навигацию. Эта навигация не должна уводить читателя на другие страницы, а должна работать в пределах страницы со статьёй.
Для создания такой навигации используются ссылки-якоря. Ссылка-якорь — это обычная ссылка, в адресе которой используется символ # , после которого следует идентификатор элемента. Идентификатор создаётся с помощью атрибута id у того тега, к которому надо перейти при щелчке по ссылке. Причём сам тег может быть любым: , ,
и так далее.
Вот так выглядит адрес, состоящий из одного якоря:
При щелчке по такой ссылке браузер найдёт на странице элемент с соответствующим атрибутом id и прокрутит окно страницы к нему.
Содержание первой главы
При этом перезагрузки страницы не произойдёт.
Интересно, что якорь также можно использовать и в абсолютных адресах, тогда после перехода на нужную страницу по аналогии произойдёт прокрутка к заданной части этой страницы.
Якоря отлично подойдут для создания оглавления для статьи в этом посте.
Перейти к заданию
- index.html Сплит-режим
- style.css Сплит-режим