Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шабл.класс "Матрица".Помогите сделать пожалуйста! 
V
    Опции темы
bronislav
Дата 8.6.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Цитата(yorgan @  8.6.2008,  20:02 Найти цитируемый пост)
Кстати, а как делать библиотеку в Вижуал Студио 2005?


Это вопрос для отдельного топика


Цитата(yorgan @  8.6.2008,  20:02 Найти цитируемый пост)
А можно сделать из этого кода хеадер-файл matrix.h и уже из matrix.h и matrix.срр (где main) сделать matrix.lib?


А как ты собораешься использовать такую библиотеку с main?


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
yorgan
Дата 8.6.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Видимо вот в чем собака зарыта. Преподаватель задал вопрос таким образом: можно ли сделать matrix.lib из matrix.h и matrix.cpp (где мэйн), значит с мэйном точно нельзя. А просто из matrix.h можно?
PM MAIL   Вверх
bronislav
Дата 8.6.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Только из заголовочного файла (.h) сделать библиотеку нельзя.




--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
yorgan
  Дата 8.6.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



хм... тогда возникает закономерный вопрос)))
А что еще нужно, если *.срр-файл с мэйном использовать нельзя ?

P.s. Код с шаблонным классом "матрица" можно сохранить как .cpp без мэна...

Это сообщение отредактировал(а) yorgan - 8.6.2008, 21:51
PM MAIL   Вверх
rrrFer
Дата 8.6.2008, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 0
Всего: 1



yorgan
Цитата

хм... тогда возникает закономерный вопрос)))
А что еще нужно, если *.срр-файл с мэйном использовать нельзя ?

наверно надо выделить все функции, кроме main в отдельный .cpp smile

Это сообщение отредактировал(а) rrrFer - 8.6.2008, 22:04
PM MAIL WWW ICQ   Вверх
bsa
Дата 9.6.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Для создания бинарной библиотеки (*.lib, *.a, *.dll, *.so) нужно создавать *.cpp файл. В него можно выделить только нешаблонные функции и методы нешаблонных классов.
Другими словами - из шаблонного класса бинарную библиотеку сделать нельзя, так как исходный код шаблона должен быть доступен во всех местах компиляции.

С другой стороны, просто библиотеки сделать можно. Типичный пример - boost. Там далеко не все библиотеки имеют бинарные составляющие.
PM   Вверх
yorgan
Дата 9.6.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Таким образом из шаблонных классов библиотеку не создать... а можно ее создать из нешаблонных классов smile
А можно вот это место поподробнее разжевать для тугодума?
Цитата(bsa @  9.6.2008,  11:45 Найти цитируемый пост)
так как исходный код шаблона должен быть доступен во всех местах компиляции.


Заранее спасибо!
PM MAIL   Вверх
bsa
Дата 9.6.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(yorgan @ 9.6.2008,  19:49)
А можно вот это место поподробнее разжевать для тугодума?
Цитата(bsa @  9.6.2008,  11:45 Найти цитируемый пост)
так как исходный код шаблона должен быть доступен во всех местах компиляции.

На самом деле нужен не весь исходный код, а только используемая часть. Более того, даже она не обязательна (это уже тонкости, и тебе заморачиваться на них не стоит). Даже в стандарте С++ есть упоминание возможности создания бинарных библиотек шаблонов, но, на сколько мне известно, ни один популярный компилятор этого делать не умеет.

Для того, чтобы ответить на этот вопрос нужно понимать, что такое шаблон. Шаблон - это программа этапа компиляции (т.е. ее выполняет компилятор), результатом работы которой является специализированная функция(класс), которая умеет работать только с указанными параметрами [шаблона] и ничем иным. Таких специализаций компилятор может нагородить кучу - по числу уникальных комбинаций параметров шаблона. Но чтобы ему создать специализацию шаблона, ему нужно иметь доступ к исходному тексту этого шаблона. Если шаблон - это класс, то должен быть доступ к тексту самого класса, а так же методов используемых в данном месте программы (методы, которые не используются в программе, проверяются только на синтаксические ошибки и более ни в чем не учавствуют).

Пример на пальцах (тех кто понимает, просьба не пинать, но красивее ничего не придумал), у тебя есть текст, ты хочешь одно определенное слово заменить на другое, не зная полностью этого слова (или даже зная только первую и последную буквы) ты корректно выполнить операцию не сможешь.
PM   Вверх
yorgan
Дата 11.6.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(bsa @  9.6.2008,  20:51 Найти цитируемый пост)
Шаблон - это программа этапа компиляции (т.е. ее выполняет компилятор), результатом работы которой является специализированная функция(класс), которая умеет работать только с указанными параметрами [шаблона] и ничем иным. Таких специализаций компилятор может нагородить кучу - по числу уникальных комбинаций параметров шаблона. Но чтобы ему создать специализацию шаблона, ему нужно иметь доступ к исходному тексту этого шаблона.

Извини за серость, а компилятор не имеет доступа к исходному тексту шаблона, если этот шаблон определен в библиотеке?
PM MAIL   Вверх
JackYF
Дата 11.6.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(yorgan @  10.6.2008,  23:19 Найти цитируемый пост)
если этот шаблон определен в библиотеке? 

Шаблон - это исходный код. Если библиотека не распространяется в исходных кодах, то шаблон в библиотеке определён быть не может.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
yorgan
Дата 11.6.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(JackYF @  11.6.2008,  01:47 Найти цитируемый пост)
Шаблон - это исходный код. Если библиотека не распространяется в исходных кодах, то шаблон в библиотеке определён быть не может. 

Что значит распространяется или не распространяется...
Преподаватель задал такой вопрос: Можно ли из твоего шаблонного класса матрица сделать библиотеку "matrix.lib" и будет ли она работать при подключении к другому проекту?
PM MAIL   Вверх
JackYF
Дата 11.6.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Бинарную - нет.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
yorgan
Дата 11.6.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(JackYF @  11.6.2008,  16:26 Найти цитируемый пост)
Бинарную - нет. 

почему?
Т.к.:
Цитата(bsa @  9.6.2008,  20:51 Найти цитируемый пост)
нужно иметь доступ к исходному тексту этого шаблона

Почему компилятор не имеет доступа к исходному тексту в бинарной библиотеке? А в какой библиотеке имеет доступ? Он что не может читать бинарные библиотеки или что?
PM MAIL   Вверх
JackYF
Дата 11.6.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(yorgan @  11.6.2008,  16:45 Найти цитируемый пост)
Почему компилятор не имеет доступа к исходному тексту в бинарной библиотеке?

Потому что бинарная библиотека она на то и бинарная, что исходников не содержит smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
yorgan
Дата 12.6.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



А какая разница описан ли шаблонный класс на языке С++ или в двоичном коде? А если создать бинарную библиотеку просто из класса (не шаблонного), то компилятор все хорошо будет читать и понимать?
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.