![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: 2 Всего: 3 |
Это вопрос для отдельного топика
А как ты собораешься использовать такую библиотеку с main? -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Видимо вот в чем собака зарыта. Преподаватель задал вопрос таким образом: можно ли сделать matrix.lib из matrix.h и matrix.cpp (где мэйн), значит с мэйном точно нельзя. А просто из matrix.h можно?
|
|||
|
||||
bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: 2 Всего: 3 |
Только из заголовочного файла (.h) сделать библиотеку нельзя.
-------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
хм... тогда возникает закономерный вопрос)))
А что еще нужно, если *.срр-файл с мэйном использовать нельзя ? P.s. Код с шаблонным классом "матрица" можно сохранить как .cpp без мэна... Это сообщение отредактировал(а) yorgan - 8.6.2008, 21:51 |
|||
|
||||
rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
yorgan,
наверно надо выделить все функции, кроме main в отдельный .cpp ![]() Это сообщение отредактировал(а) rrrFer - 8.6.2008, 22:04 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Для создания бинарной библиотеки (*.lib, *.a, *.dll, *.so) нужно создавать *.cpp файл. В него можно выделить только нешаблонные функции и методы нешаблонных классов.
Другими словами - из шаблонного класса бинарную библиотеку сделать нельзя, так как исходный код шаблона должен быть доступен во всех местах компиляции. С другой стороны, просто библиотеки сделать можно. Типичный пример - boost. Там далеко не все библиотеки имеют бинарные составляющие. |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
На самом деле нужен не весь исходный код, а только используемая часть. Более того, даже она не обязательна (это уже тонкости, и тебе заморачиваться на них не стоит). Даже в стандарте С++ есть упоминание возможности создания бинарных библиотек шаблонов, но, на сколько мне известно, ни один популярный компилятор этого делать не умеет. Для того, чтобы ответить на этот вопрос нужно понимать, что такое шаблон. Шаблон - это программа этапа компиляции (т.е. ее выполняет компилятор), результатом работы которой является специализированная функция(класс), которая умеет работать только с указанными параметрами [шаблона] и ничем иным. Таких специализаций компилятор может нагородить кучу - по числу уникальных комбинаций параметров шаблона. Но чтобы ему создать специализацию шаблона, ему нужно иметь доступ к исходному тексту этого шаблона. Если шаблон - это класс, то должен быть доступ к тексту самого класса, а так же методов используемых в данном месте программы (методы, которые не используются в программе, проверяются только на синтаксические ошибки и более ни в чем не учавствуют). Пример на пальцах (тех кто понимает, просьба не пинать, но красивее ничего не придумал), у тебя есть текст, ты хочешь одно определенное слово заменить на другое, не зная полностью этого слова (или даже зная только первую и последную буквы) ты корректно выполнить операцию не сможешь. |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Извини за серость, а компилятор не имеет доступа к исходному тексту шаблона, если этот шаблон определен в библиотеке? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Шаблон - это исходный код. Если библиотека не распространяется в исходных кодах, то шаблон в библиотеке определён быть не может. |
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
Что значит распространяется или не распространяется... Преподаватель задал такой вопрос: Можно ли из твоего шаблонного класса матрица сделать библиотеку "matrix.lib" и будет ли она работать при подключении к другому проекту? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Бинарную - нет.
|
|||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
почему? Т.к.: Почему компилятор не имеет доступа к исходному тексту в бинарной библиотеке? А в какой библиотеке имеет доступ? Он что не может читать бинарные библиотеки или что? |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
yorgan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 5.6.2008 Репутация: нет Всего: нет |
А какая разница описан ли шаблонный класс на языке С++ или в двоичном коде? А если создать бинарную библиотеку просто из класса (не шаблонного), то компилятор все хорошо будет читать и понимать?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |