Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
1

Boost & предстоящая компиляция

16.02.2015, 13:27. Показов 1390. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В проекте использовал boost::lexical_cast. Предстоит компилить проект на компе, где нет буста. Как можно упаковать из буста lexical_cast в проект, чтобы его можно было скомпилить без установленного расширения языка C++.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2015, 13:27
Ответы с готовыми решениями:

Undefined reference to 'My_lab2::serialize_child(My_lab2::My_stack&,boost::interpro cess::file_lock&)')
Компилирую test: g++ test.cpp -L. -lwrk -lboost_serialization -o programwrk -std=c++0x Так же...

Компиляция библиотек boost
Здраствуйте. Извините что пишу не в тот подфорум, но тут больше вероятность что кто-то даст ответ в...

Allocator sts&boost
Возникла проблема при обработке больших потоков данных. Данные представляют из себя пакеты из сети...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H ...

22
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.02.2015, 14:24 2
mat_for_c, замени лексикал каст на что угодно другое и радуйся. stringstream, например
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
16.02.2015, 18:55  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
stringstream, например
Вот только счастья то не получилось...
C++
1
2
3
4
string ops = "Inf";
double opf;
stringstream ss(ops);
ss >> opf;
значение opf = 2.3107, что явно не соответствует бесконечности, а мне это весомо.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
16.02.2015, 18:59 4
Цитата Сообщение от mat_for_c Посмотреть сообщение
что явно не соответствует бесконечности, а мне это весомо.
может так ?
C++
1
2
3
4
5
6
7
8
string ops = "Inf";
double opf;
if(ops=="Inf")
 opf=1.0/0;
else{
stringstream ss(ops);
ss >> opf;
}
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
16.02.2015, 20:07 5
Просто подключи хедер lexical_cast.hpp
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.02.2015, 20:18 6
Цитата Сообщение от igorrr37 Посмотреть сообщение
Просто подключи хедер lexical_cast.hpp
Боюсь что не получится. Вот начало файла lexical_cast.hpp из boost-1.55.0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
#include <boost/config.hpp>
#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
#define BOOST_LCAST_NO_WCHAR_T
#endif
 
#include <climits>
#include <cstddef>
#include <string>
#include <cstring>
#include <cstdio>
#include <typeinfo>
#include <exception>
#include <boost/limits.hpp>
#include <boost/mpl/if.hpp>
#include <boost/throw_exception.hpp>
#include <boost/type_traits/ice.hpp>
#include <boost/type_traits/is_pointer.hpp>
#include <boost/static_assert.hpp>
#include <boost/detail/lcast_precision.hpp>
#include <boost/detail/workaround.hpp>
...
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
16.02.2015, 20:30 7
Ну вроде хедер-онли библиотека. А если все хедеры подбросить.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.02.2015, 20:33 8
Цитата Сообщение от igorrr37 Посмотреть сообщение
А если все хедеры подбросить.
Так у ТС как раз с этим и проблема. Не хочет он все подбрасывать. Не удобно ему.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.02.2015, 23:16 9
Цитата Сообщение от mat_for_c Посмотреть сообщение
чтобы его можно было скомпилить без установленного расширения языка C++.
Расширение языка? Если речь о самом boost, то lexical_cast вроде как header-only. Поэтому чисто формально (для уменьшения файлового багажа) можно сформировать набор действительно необходимых (косвенно) заголовочников. Но, имхо, затея эта глупая - делить одну либу на подмножества. Так как если сейчас
Цитата Сообщение от mat_for_c Посмотреть сообщение
Предстоит компилить проект на компе, где нет буста.
в скором времени может потребовать компилить другой проект с другой частью буста. И в конечном итоге придется весь буст и перетащить на этот комп.
Цитата Сообщение от castaway Посмотреть сообщение
Не хочет он все подбрасывать. Не удобно ему.
Странно всё это. Есть файл, от которого зависит проект, но хочется собрать этот проект без оного файла? Можно написать свой эквивалент, но зачем, если уже используется готовый. Проблема для меня не ясна, если честно.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.02.2015, 23:24 10
Цитата Сообщение от Tulosba Посмотреть сообщение
Странно всё это. Есть файл, от которого зависит проект, но хочется собрать этот проект без оного файла? Можно написать свой эквивалент, но зачем, если уже используется готовый. Проблема для меня не ясна, если честно.
Я думаю, что он имел в виду как "кастрировать" boost, чтобы "не тащить его весь за собой".
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.02.2015, 23:29 11
Цитата Сообщение от castaway Посмотреть сообщение
Я думаю, что он имел в виду как "кастрировать" boost, чтобы не "тащить его весь за собой".
Понятно что он хочет, не понятно - зачем.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.02.2015, 23:37 12
Цитата Сообщение от Tulosba Посмотреть сообщение
Понятно что он хочет, не понятно - зачем.
Ну тогда
Цитата Сообщение от Tulosba Посмотреть сообщение
Странно всё это.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.02.2015, 09:58 13
Цитата Сообщение от mat_for_c Посмотреть сообщение
Как можно упаковать из буста lexical_cast в проект, чтобы его можно было скомпилить без установленного расширения языка C++.
Если lexical_cast нужен для заранее известных типов, можно собрать его
как библиотеку (.lib или .dll) и подключать к любому проекту, где Буста
вообще нет.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2015, 12:57  [ТС] 14
Цитата Сообщение от Убежденный Посмотреть сообщение
как библиотеку (.lib или .dll)
а как это оформить? я смотрел в папке , где лежит boost, но там нет lexical_cast.lib
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.02.2015, 13:10 15
Цитата Сообщение от mat_for_c Посмотреть сообщение
а как это оформить?
Создаете проект (static library или dll), пишете в нем функцию или класс,
которая работает с lexical_cast, наружу выставляете какой-нибудь API.
Можно даже чисто C-шный. Все, на выходе получается библиотека,
которую можно линковать к любому проекту и без Boost.
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2015, 15:57  [ТС] 16
Создал проект static library.
f1.h
C++
1
2
template <class T>
T lex_cast(const std::string& s);
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include <boost\lexical_cast.hpp>
#include <string>
#include "f1.h"
 
template <class T>
T lex_cast(const std::string& s)
{
   T l_c = boost::lexical_cast<T>(s);
   return l_c;
}
Скомпилил его с параметром /MT

Потом в решение добавил новый проект, указал ссылку на предыдущий:
lc_test.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string>
#include <iostream>
#include "..\lex_cast_lib\f1.h"
 
using namespace std;
 
int main () {
   string s = "3.14";
   float t;
   t = lex_cast<float>(s);
 
   cout << t;
}
В результате пишет LNK2001 неразрешенный внешний символ ""float __cdecl lex_cast<float> ...

Что не так я сделал?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.02.2015, 16:05 17
mat_for_c, Определение шаблонной функции нельзя выносить в .cpp файл. Вам говорили сделать сишный (не темплейтный) АПИ, а не форварднуть вызов функции.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.02.2015, 16:13 18
Цитата Сообщение от ForEveR Посмотреть сообщение
Определение шаблонной функции нельзя выносить в .cpp файл.
Ага, вот я и написал выше:
Цитата Сообщение от Убежденный Посмотреть сообщение
Если lexical_cast нужен для заранее известных типов
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
17.02.2015, 16:13  [ТС] 19
Цитата Сообщение от ForEveR Посмотреть сообщение
Вам говорили сделать сишный (не темплейтный) АПИ, а не форварднуть вызов функции.
а по-русски можно?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.02.2015, 16:22 20
Лучший ответ Сообщение было отмечено mat_for_c как решение

Решение

Если нужно только несколько типов можно через явное инстанцирование.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// header
 
#include <string>
 
template<typename T>
T lcast(const std::string&);
 
// cpp
 
#include <boost/lexical_cast.hpp>
#include "template_lib.hpp"
 
template<typename T>
T lcast(const std::string& s)
{
   return boost::lexical_cast<T>(s);
}
 
template double lcast(const std::string&);
template int lcast(const std::string&);
 
// main
 
#include <iostream>
#include "template_lib.hpp"
 
int main()
{
   std::cout << lcast<double>("1.0") << std::endl;
}
1
17.02.2015, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2015, 16:22
Помогаю со студенческими работами здесь

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt;...

Компиляция. Ругается на boost
При компиляции выдает такие ошибки: tmp/ccuaBs73.o: In function...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru