HLFX.Ru Forum
Показать все 123 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- нубовопросы по c++ (https://hlfx.ru/forum/showthread.php?threadid=5083)


Отправлено thambs 20-12-2017 в 19:37:

нубовопросы по c++

Неожиданно, возник вопрос про конструкторы по умолчанию. Например, есть структура

C++ Source Code:
1
struct foo{
2
  foo(){}
3
  foo(int...){}
4
};
5
int main () {
6
  foo x;
7
  foo y();
8
  foo z(1);
9
  cout<<typeid(x).name()<<endl;
10
  cout<<typeid(y).name()<<endl;
11
  cout<<typeid(z).name()<<endl;
12
  return 0;

На выходе имеем
Цитата:
3foo
F3foovE
3foo

или после с++filt
Цитата:
foo
foo ()
foo

Почему записи "foo x" и "foo x()" не эквивалентны и что за такой тип "foo ()"?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 21-12-2017 в 04:13:

Тип foo() - это функция, возвращающая foo и не принимающая никаких аргументов. Ты же сам её объявил, смотри:

C++ Source Code:
foo x;  // создание экземпляра класса foo с вызовом конструктора по умолчанию
foo y();  // объявление функции y, которая возвращает foo
foo z(1);  // создание экземпляра класса foo с вызовом конструктора foo(int)

Пустые круглые скобки нельзя использовать для вызова конструктора по умолчанию при создании объекта. Тут возникает двусмысленность - и компилятор строго по стандарту её разрешает. Если процитировать стандарт своими словами - то примерно так: "всё, что может быть объявлением функции, должно быть объявлением функции".

__________________

xaerox on Vivino


Отправлено thambs 21-12-2017 в 08:31:

>это функция
действительно. что-то сразу не распарсил.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено ComradeAndrew 21-12-2017 в 18:56:

C++ Source Code:
foo y();  // объявление функции y, которая возвращает foo

Вот ведь. Никогда об этом не задумывался. Только сейчас дошло. Спасибо


Отправлено Дядя Миша 21-12-2017 в 19:42:

А в новых стандартах C++ вот так

C++ Source Code:
std::vector< std::pair< vec_t, int >> foo;

уже можно песать или до сих пор нельзя?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 21-12-2017 в 19:49:

Дядя Миша
В смысле STL-контейнер в STL-контейнере? Я юзал и мысли не было, что так нельзя. Студия 2015 хавала.

C++ Source Code:
std::map<HCP*, std::set<HCP*>> slu;


Отправлено Дядя Миша 21-12-2017 в 19:52:

Цитата:
nemyax писал:
В смысле STL-контейнер в STL-контейнере?

нет. Ну Ксер поймет

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 21-12-2017 в 21:23:

>foo y(); // объявление функции y, которая возвращает foo
А не, всё равно не распарсил, это же nested-функция получается а они в стандарте запрещены.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 21-12-2017 в 21:32:

thambs
Объявить дадут, а определить нет.


Отправлено XaeroX 22-12-2017 в 04:58:

Да, объявлять функции внутри функций вполне можно.
Вот тебе конкретный пример, где это необходимо:

C++ Source Code:
1
class Bar
2
{
3
public:
4
  Bar() = default;
5
  void Foo();
6
};
7
 
8
void Bar::Foo()
9
{
10
  Bar foo(); // <---- это не создание объекта класса Bar, но эта строка нужна!
11
  foo();
12
  std::cout << "Bar";
13
}
14
 
15
Bar foo()
16
{
17
  std::cout << "Foo";
18
  return Bar();
19
}
20
 
21
int main(int argc, char *argv[])
22
{
23
  Bar bar;
24
  bar.Foo();
25
}


Добавлено 22-12-2017 в 11:58:

Цитата:
Дядя Миша писал:
уже можно песать или до сих пор нельзя?

Да хоть так:
C++ Source Code:
std::vector<std::vector<std::vector<std::pair<int,int>>>> v;

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-12-2017 в 14:32:

Цитата:
XaeroX писал:
Да хоть так:

И компилятор больше не посчитает это битовым сдвигом?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 22-12-2017 в 17:27:

Дядя Миша
Ошибка была только в компиляторе MSVC, она давно исправлена, да.

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-12-2017 в 17:49:

XaeroX ну что же. Для шестой студии статьи Борескова всё еще актуальны

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 22-12-2017 в 18:31:

Дядя Миша
Шестая студия - это легенда, о которой рассказывают седые старики. Ну примерно как о том, как видели живого нациста.

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-12-2017 в 19:15:

XaeroX как у МаркТвена было написано в каком-то из рассказов, юзая шестую студию, я внезапно начал ощущать дружеские чувства к мумии фараона и желание поболтать с ним на злободневные темы.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 23-12-2017 в 00:58:

XaeroX
Т.е. функцию вроде-как определили в локальном неймспэйсе класса, а она вылезла в глобальный? Вот этот момент какой-то странный, хоть и компилируется. Это точно не UB?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 23-12-2017 в 05:57:

thambs
Функция определена в глобальном неймспейсе.
Кажется, ты путаешь объявление и определение.

__________________

xaerox on Vivino


Отправлено nemyax 23-12-2017 в 08:15:

XaeroX
Такой вызов — единственная осмысленная вещь, которую можно сделать с этой объявленной функцией?

Кстати, в гецеце же вроде можно включить расширение, которое даёт вложенные функции.


Отправлено XaeroX 23-12-2017 в 09:46:

Цитата:
nemyax писал:
Такой вызов — единственная осмысленная вещь, которую можно сделать с этой объявленной функцией?

А что ещё можно сделать с функцией, кроме как вызвать?
Ну можешь адрес взять.

Цитата:
nemyax писал:
Кстати, в гецеце же вроде можно включить расширение, которое даёт вложенные функции.

Кошмар какой.
Это не нужно, т.к. есть лямбды.

__________________

xaerox on Vivino


Отправлено thambs 23-12-2017 в 11:48:

XaeroX
Так объявление в неймспэйсе класса, а определение в глобальном, вот это мне странно. Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено a1batross 23-12-2017 в 12:12:

XaeroX даже если лябмд нет, можно объявлять, например, структуру со статическими методами прямо в теле. Но из двух кошмаров и лямбд, всё же лучше выбирать лямбды.


Отправлено Government-Man 23-12-2017 в 12:26:

Цитата:
thambs писал:
Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?


Если ты будешь вызывать ее из этого же класса, то будет вызываться функция из класса.


Отправлено XaeroX 23-12-2017 в 12:30:

Цитата:
a1batross писал:
даже если лябмд нет, можно объявлять, например, структуру со статическими методами прямо в теле.

Ну можно, конечно, мы в детстве так развлекались.
Но это формально не вложенная функция.
Цитата:
thambs писал:
Так ведь можно и в другом классе такую же функцию объявить и будет путанница или нет?

А ты поэкспериментируй с typeid и увидишь, что у них разные сигнатуры будут.
Путаница может быть только с namespace. И здесь у плюсов весьма и весьма запутанные правила. Но они существуют.

__________________

xaerox on Vivino


Отправлено Дядя Миша 23-12-2017 в 13:45:

Цитата:
XaeroX писал:
Но это формально не вложенная функция.

Эй, чувак мы добавили возможность объявить функцию внутри функции, чтобы ты мог вызывать функцию прямо из функции!

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 10-05-2018 в 16:19:

А вот ещё вопрос про наследование возник внезапно.
Например, у меня есть базовый шаблонный класс

C++ Source Code:
1
template <typename t, size_t n>
2
struct base{
3
  t*         data;
4
  size_t* shape;
5
base<t, dim>(t* data, size_t* shape):
6
  data(data), shape(shape){}
7
  ...
8
};
внутри которого определены всякие полезные методы.
Я хочу отнаследоваться от него, прилинковав указатель shape к массиву:
C++ Source Code:
1
template <typename t, size_t n>
2
struct derived: base<t, n>{
3
  size_t _shape[n];
4
  derived<t, dim>(){
5
    this->data   = nullptr; //кстати, почему здесь нужно обращаться к this?
6
    this->shape  = _shape;
7
  };
8
  ...
9
};
, однако, хотелось бы избавиться от лишнего присваивания и в явном виде "подменить" указатель на массив. Если я просто объявлю size_t shape[n], то в результате получу ещё одно поле с тем же именем, чего мне не нужно. Как сделать правильно?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено ComradeAndrew 10-05-2018 в 16:38:

Цитата:
thambs писал:
хотелось бы избавиться от лишнего присваивания и в явном виде "подменить" указатель на массив

Прямо переопределить не получится
https://stackoverflow.com/a/19290950/4109062


Отправлено thambs 10-05-2018 в 16:54:

ComradeAndrew
Хмм, а как тогда лучше перестроить иерархию классов?
Конкретно, у меня такой вариант морды, для доступа к многомерному массиву:

code:
template <typename t, size_t dim> struct carray_base{ t* data; size_t* offset; size_t* shape; carray_base<t, dim>(t* data, size_t* shape, size_t* offset): data(data), shape(shape), offset(offset) {} inline size_t size(void)const{ return shape[0]*offset[0]; } template <typename num, size_t d = dim, typename enable_if<(d > 1), size_t>::type = 0> inline carray_base<t, dim-1> operator [] (num i){ return carray_base<t, dim-1>(data + (size_t)i*offset[0], shape+1, offset+1); } template <typename num, size_t d = dim, typename enable_if<(d == 1), size_t>::type = 0> inline t& operator [] (num i) { return data[(size_t)i]; } };

Предполагается, что место под данные заранее аллокировано (где угодно, хоть на стеке, хоть в куче, хоть на gpu). Что бы это можно было удобно использовать и копировать, хочется сделать производный класс, который и сам обращается с внешним аллокатором, но вот аллокатить ещё и место под служебные данные совсем не хочется, логично было бы хранить offset и shape прямо в классе. Вот и думаю как лучше сделать.

ps: тег [/сср] корябает отступы

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено thambs 11-05-2018 в 17:21:

Ага, разобрался. Сделал так:

code:
template <typename t, size_t dim, bool proxy> struct carray_base{ static_assert(dim>0, ""); typedef typename conditional<proxy, size_t*, size_t[dim]>::type id; t* data; id offset; id shape; ... }; template <typename t, size_t dim> struct carray: carray_base<t, dim, false>{ ... };

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 11-05-2018 в 21:35:

Как вы эти шаблоны делаете, я их боюсь до ужаса.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 12-05-2018 в 08:04:

Дядя Миша
Ну шаблоны - скорее исключение, чем правило. Их обычно не рекомендуют использовать там, где можно без них обойтись (то есть в 99% случаев). Для меня на работе протащить шаблон в master - это всегда праздник.

__________________

xaerox on Vivino


Отправлено thambs 16-05-2018 в 09:17:

Ага, а в 17м стандарте можно наконец-то сделать по человечески:

code:
typedef typename conditional <(dim>1), carray_base<t, dim-1, true>, t&>::type out; template <typename num> //c++17 inline out operator [] (const num& i){ if constexpr (dim>1){ return out(data + (size_t)i*offset[0], shape+1, offset+1); } else { return data[(size_t)i]; } }

Почему хорошие годные языковые конструкции добавляют так поздно?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 16-05-2018 в 11:13:

Цитата:
XaeroX писал:
Для меня на работе протащить шаблон в master - это всегда праздник.



Добавлено 16-05-2018 в 14:13:

Цитата:
thambs писал:
Почему хорошие годные языковые конструкции добавляют так поздно?

Я не знаю, что по этому поводу думает Ксер, но у меня сложилось мнение, что парадигма С++ идеально ложится только на две вещи - всевозможные окошки-менюшки и как ни странно энтити из халфы-кваки, да и вообще игровые объекты. Потому что там все эти принципы наследования очень кстати. А в повседневности С++ годится только для АТД.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 16-05-2018 в 15:01:

Цитата:
thambs писал:
Почему хорошие годные языковые конструкции добавляют так поздно?

Потому же, почему так поздно вернули Крым.

__________________

xaerox on Vivino


Отправлено thambs 05-06-2018 в 16:06:

Извиняюсь ещё раз за поднятие темы, но есть ли разница между приведением типов

code:
(int)(x)
и (вызовом конструктора?)
code:
int(x)
?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено a1batross 05-06-2018 в 16:37:

thambs никакой.


Отправлено Government-Man 05-06-2018 в 16:43:

Цитата:
thambs писал:
есть ли разница


Формально - это совершенно разные вещи. И вроде даже есть случаи, когда это имеет значение.


Отправлено XaeroX 05-06-2018 в 17:22:

Цитата:
a1batross писал:
thambs никакой.

+1

Цитата:
The functional cast expression consists of a simple type specifier or a typedef specifier (in other words, a single-word type name: unsigned int(expression) or int*(expression) are not valid), followed by a single expression in parentheses. This cast expression is exactly equivalent to the corresponding C-style cast expression.

http://en.cppreference.com/w/cpp/language/explicit_cast

P.S.: не надо так писать. Используй static_cast.

__________________

xaerox on Vivino


Отправлено Дядя Миша 05-06-2018 в 18:47:

Цитата:
Government-Man писал:
И вроде даже есть случаи, когда это имеет значение.

А что в новых крестах можно атомарные типы перегружать?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Дядя Миша 06-06-2018 в 10:23:

Вот и у меня созрел вопрос по С++. Атомарный тип half в язык добавят когда-нибудь уже наконец.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ComradeAndrew 06-06-2018 в 11:37:

Дядя Миша
Вряд ли. Минимальный размер выделяемой памяти - байт. А битовые поля и так есть https://en.cppreference.com/w/cpp/language/bit_field
А насчет "атомарности", мне кажется тут некая путаница возникла. Фундаментальные типы не являются атомарными - https://stackoverflow.com/questions...al-types-atomic


Отправлено Дядя Миша 06-06-2018 в 11:57:

ComradeAndrew ты точно понял мой вопрос?

Добавлено 06-06-2018 в 14:57:

half это вещественное с половинной точностью, два байта занимает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ComradeAndrew 06-06-2018 в 12:04:

Цитата:
Дядя Миша писал:
half это вещественное с половинной точностью, два байта занимает.

Ах, вот оно что. Да, не про то подумал, извиняюсь.
К сожалению на счет этого ничего не могу сказать.


Отправлено thambs 06-02-2019 в 16:10:

В 17м стандарте появилась спецконструкция constexpr if, значит ли это, что в обычном случае компилятор не оптимизирует оператор if от constexpr выражений?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 06-02-2019 в 16:16:

thambs
Компилятор всё оптимизирует. constexpr if, в отличие от обычного if, может выполняться компилятором.

__________________

xaerox on Vivino


Отправлено thambs 06-02-2019 в 16:46:

XaeroX
Я правильно понимаю, что оптимизация if производится в случае если на входе constexpr переменная, а constexpr if может работать чистой функцией от constexpr переменных?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 06-02-2019 в 17:56:

thambs
Да, правильно. Это всё нужно по большому счёту для шаблонного программирования.

__________________

xaerox on Vivino


Отправлено thambs 06-02-2019 в 18:03:

XaeroX т.е. при компиляции конструкции

code:
template<int a> void foo(){ if constexpr (a>1) do_stuff(); };
и
code:
template<int a> void bar(){ constexpr bool tmp = a>1; if (tmp) do_stuff(); };
эквивалентны и условный переход исчезнет для любого инстанса?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 06-02-2019 в 18:48:

thambs
Насколько я знаю, if constexpr ведёт себя идентично if в обычных функциях.
Разница возникает в constexpr-функциях. Такие функции не скомпилируются с обычным if, потому что он гарантирует, что лишь одна из веток будет выполняться, а вот constexpr-if гарантирует, что лишь одна из веток будет компилироваться.
Ещё раз - это всё нужно в метапрограммировании, когда мы из-за отсутствия if constexpr в С++14 (интересно, многие ли уже на С++17 перешли?) городим этажерки с std::enable_if.

__________________

xaerox on Vivino


Отправлено Дядя Миша 06-02-2019 в 19:43:

А чо, если я в шестёрке напишу if( 1 ) она это не выкинет?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 19-02-2019 в 14:08:

мультидефайн в зависимости от параметра

Что-то так и не придумал как это сделать, лучше опишу что я хочу, а потом спрошу, можно-ли и как это сделать.

вообщем, хочется что-то вроде макроса, который в зависимости от параметра делает много дефайнов, и другого, который чистит за ним. Что-то вроде:

макрос def_args(n): делает

code:
#define $a foo<n> #define $b bar<n> ...

и undef_args:
code:
#undef $a #undef $b
Можно-ли, и как?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 19-02-2019 в 14:59:

Вроде бы нельзя.

__________________

xaerox on Vivino


Отправлено thambs 10-03-2019 в 12:48:

Снова вопрос. Есть например функция от n-аргументов, можно ли её как-то вызвать использовав массив из n-аргументов, не прописывая их вручную? Т.е. хочется что-то вроде рекурсивного шаблона, каждый из которого добавляет ещё один аргумент к частичному применению функции:

code:
foo(...); int xs[n]; apply<xs,n>(foo);

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 10-03-2019 в 13:05:

Я не знаю способа так сделать. Если узнаешь - напиши.
Но вообще говоря, если ты хочешь передавать аргументы в функцию как массив, то и надо передавать массив, можно даже compile time (std::array).
Идея вариативных шаблонов в том, чтобы поддерживать произвольное число аргументов у функции, а у тебя число аргументов фиксированное.

__________________

xaerox on Vivino


Отправлено ~ X ~ 11-03-2019 в 09:20:

thambs here, I googled that for you https://embeddedartistry.com/blog/2...unctions-c-vs-c
может, там найдутся варианты.

Добавлено 11-03-2019 в 12:20:

https://stackoverflow.com/questions...c-function-in-c
в ответах нашлись вроде.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 11-03-2019 в 15:35:

~ X ~ стесняюсь спросить, а по каким именно ключевым словам ты гуглил? Вроде бы это вообще не по теме.

__________________

xaerox on Vivino


Отправлено ~ X ~ 11-03-2019 в 18:38:

Тебе зайцев не жалко? И постыдился, и спросил
А я, похоже, не понял его вопроса.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 14-03-2019 в 21:55:

Зачем битовые сдвиги оформляют в табличку? Неужели такой подход даёт хоть какой-то выигрыш в производительности? В качестве примера вальвовский bistream buffer.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 27-03-2019 в 21:58:

А вот поясните мне, что-то я совсем запутался с тем как c++ осуществляет неявное преобразование типов.

C++ Source Code:
1
#include <complex>
2
#include <cmath>
3
typedef std::complex<float> cfloat;
4
int main(int argc, char **argv){
5
  int i,n; constexpr cfloat _coeff(0, (-4)*atan2(1,1));
6
  cfloat x = exp(_coeff * cfloat(i)/cfloat(n)); //fine
7
  cfloat y = exp(_coeff * i/cfloat(n)); //fail
8
  return 0;
9
}

Собственно, почему в этом выражении не происходит неявного приведения типов, в чём дело?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено nemyax 27-03-2019 в 22:29:

Ну а слеш перегружен для такой пары типов?


Отправлено nemyax 21-08-2019 в 15:44:

Не знаю даже, с чего начать свой нубский вопрос. Столкнулся с порчей памяти, которую никак не могу отдебажить. Проявляется в FLTK-поделке при повторении операций undo-redo, реализованных через перезапись структов их сохранёнными состояниями (сейчас через приведение, но через мемкпю тоже делал, разницы нету). Поправил все невысвобождения, какие смог найти, проверил аллоцируемые размеры. В результате под линуксом уже не валится, но под вендой продолжает. Самое интересное, данные в слепках структов верные, и анду-реду даёт ожидаемые результаты. Но на какой-то по счёту тудымсюдым (причём это число воспроизводимое) память оказывается перепаханной.
Когда у вас, опытные товарищи, начинается чертовщина с порчей памяти, где кроме аллокации-высвобождения вы ищете её причины?


Отправлено XaeroX 21-08-2019 в 16:51:

nemyax
У нас кастомные аллокаторы с сентинелями.
Кажется, в CRT дебажный аллокатор тоже умеет проверять на предмет порчи, но я им не пользовался.
Проверь все массивы, нет ли выхода за границу.
Если порча у класс-мембера, проверь, нет ли перезаписи за пределы другого класс-мембера.
Попробуй комментировать memcpy и смотреть, пропадает ли баг.

Цитата:
nemyax писал:
причём это число воспроизводимое

Ну это вообще самый идеальный и лёгкий для дебага вариант.

__________________

xaerox on Vivino


Отправлено nemyax 21-08-2019 в 17:10:

Цитата:
XaeroX писал:
Проверь все массивы, нет ли выхода за границу.

Попроверяю ещё, конечно. Но кабут всё укладывается в выделенные размеры на куче. А если выясняется, что размер данных малый, то и вовсе обхожусь массивом на стеке без кучы.

Цитата:
XaeroX писал:
У нас кастомные аллокаторы с сентинелями.

Не на асме же вы их пишете. Небось оборачиваете стандартные средства под конкретную задачу.

Насколько вообще надёжно перетирать структы, хранящие указатели?


Отправлено XaeroX 21-08-2019 в 17:53:

Цитата:
nemyax писал:
Насколько вообще надёжно перетирать структы, хранящие указатели?

Ты бы код показал, что ли, а то сеанс телепатической связи отнимает очень много энергии.

__________________

xaerox on Vivino


Отправлено nemyax 21-08-2019 в 18:32:

Структы такого рода:

C++ Source Code:
1
struct umark
2
{
3
  const int *ptr;
4
};
5
 
6
struct ulink
7
{
8
  uvert *vert;
9
  ulink *twin;
10
  ulink *wrap;
11
  uedge *edge;
12
  ubend *bend;
13
  umark *mark;
14
};
15
 
16
struct uvert
17
{
18
  flags options;
19
  union {float xyz[3]; vec3 coords;};
20
  ulink *link;
21
  uties *ties;
22
  extra_info *extra;
23
  int misc;
24
};
25
 
26
struct uedge
27
{
28
  flags options;
29
  ulink *link;
30
  uties *ties;
31
  extra_info *extra;
32
  int misc;
33
};
34
 
35
struct uface
36
{
37
  flags options;
38
  usurf *material;
39
  ubend *bend;
40
  uties *ties;
41
  extra_info *extra;
42
  int misc;
43
};
44
 
45
struct undo_chunk
46
{
47
  int type;
48
  void *addr;
49
  char state1[Undo_slot_size];
50
  char state2[Undo_slot_size];
51
  undo_chunk *smaller; // in terms of memory address
52
  undo_chunk *greater; // in terms of memory address
53
};
54
 
55
struct backup
56
{
57
  int count;
58
  undo_chunk *root;
59
};


Перезапись состояний в таком духе:
C++ Source Code:
1
void history::change_state(undo_buffer *b, void (*fun)(undo_chunk*))
2
{
3
  backup *bak = b->bak;
4
  int count = bak->count;
5
  if (bak->root == NULL) {return;}
6
    undo_chunk **stack = NULL;
7
  if (Is_small(count))
8
  {
9
    undo_chunk *s[Small_tree];
10
    stack = (undo_chunk**)s;
11
  }
12
  else {stack = (undo_chunk**)malloc(sizeof(undo_chunk*) * count);}
13
    int pos = 0;
14
  undo_chunk *ch = bak->root;
15
  undo_chunk *gr, *sm;
16
  stack[pos] = ch;
17
  while (pos >= 0)
18
  {
19
    ch = stack[pos];
20
    gr = ch->greater;
21
    sm = ch->smaller;
22
    if (gr != NULL) {stack[pos++] = gr;}
23
      if (sm != NULL) {stack[pos++] = sm;}
24
        fun(ch);
25
      --pos;
26
    }
27
  if (!Is_small(count)) {free(stack);}
28
  }


Отправлено XaeroX 21-08-2019 в 18:36:

Ух... кондовый такой си.
Ты указатели чтоли сохраняешь, а не сами данные? Оно так разве будет работать?

__________________

xaerox on Vivino


Отправлено nemyax 21-08-2019 в 18:42:

Вот я и говорю, под линуксом просто работает. Под вендой (компилятор vc9) тоже работает, но начинается наркомания после энного повторения.


Отправлено Дядя Миша 21-08-2019 в 18:58:

Цитата:
nemyax писал:
Когда у вас, опытные товарищи, начинается чертовщина с порчей памяти, где кроме аллокации-высвобождения вы ищете её причины?

Странная постановка вопроса. Ни аллокация ни высвобождение память не портят. Очевидно она портится во время использования. А высвобождение просто фиксирует этот факт. Ну это как ключи потерять где угодно, а искать возле фонаря, потому что там светлее.

Добавлено 21-08-2019 в 21:58:

Поглядел код. Если уж сохранять что-то с указателями, то логично кусок памяти выделять так чтобы в него попала структура + то что мы хотели сохранить. И тада уже можно с этим иметь дело. И не использовать явные указатели, а что-то типа (struct + 1). Ну это так, к слову.
Тут помойму проблема в самой задумке. Это вообще не будет нормально работать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 21-08-2019 в 19:07:

Хорошо, скажем иначе: где кроме ошибочных аллокации-освобождения?

Добавлено 21-08-2019 в 22:07:

Цитата:
Дядя Миша писал:
Это вообще не будет нормально работать

Почему? Что может заставить систему похерить выделенные данные с того места, где она их выделила?


Отправлено Дядя Миша 21-08-2019 в 19:42:

Систему - ничего. Ты сам там что-то херишь, но скорее всего просто не понимаешь этого. Это самый частый сценарий. Ты думаешь что всё в порядке, а сам что-то портишь. Я за все годы программирования один единственный раз столкнулся, когда мне система в штаны насрала - тот известный случай, когда в libc и msvcrt разная реализация atof. А всё остальное - это уже сам себе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 21-08-2019 в 19:48:

Цитата:
Дядя Миша писал:
Ты сам там что-то херишь, но скорее всего просто не понимаешь этого. Это самый частый сценарий.

Вот и я о чём. Система ведь единожды выделив память сама собой не переместит её содержимое. По крайней мере мы на это рассчитываем, когда пользуемся языком без сборщика мусора. Она даже течку допустит, но занятое место не тронет. Ну по идее.


Отправлено Дядя Миша 21-08-2019 в 19:58:

Во-во, я ж и говорю что ты не о том думаешь. У тебя там что-то с указателями, скорее всего. Память-то на старом месте, а вот на что указатели указывают, это другое дело.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 21-08-2019 в 20:18:

То, что я где-то написал фигню, не означает, что общая задумка работать не будет в принципе.
Меня плющит, что коллапс созревает постепенно к четвёртому-пятому анду-реду и только при использовании компилятора микрософта.


Отправлено Дядя Миша 21-08-2019 в 21:39:

Компилятор тут точно непричём. Значит где-то посадил UB. Накопительный баг. Надо там хотя бы алертов понтаыкать и посмотреть чо происходит.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 26-08-2019 в 18:23:

Всё-таки нашёл одну течку. Заткнул, и порча снята.


Отправлено nemyax 23-09-2019 в 22:32:

Микрософт опубликовал свой STL под лицензией Apache: https://devblogs.microsoft.com/cppb...cing-msvcs-stl/

Добавлено 24-09-2019 в 01:32:

На ЛОРе профессионалы наорудовали, что там не только STL, но и либстдц++ как таковой. Не знаю, правда ли.


Отправлено Дядя Миша 24-09-2019 в 06:08:

STL это вообще удивительная вещь. Её сделал наш, а гордость почему-то никто не испытывает. Подозрительно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 24-09-2019 в 07:07:

Дядя Миша
Ну потому что он не совсем наш. Вернее, совсем не наш. Наш - это сам знаешь что, на букву К.

__________________

xaerox on Vivino


Отправлено thambs 15-10-2019 в 14:06:

Вот ещё вопрос возник про vardic templates.
Например, если мне нужна функция переменной арности от однотипных аргументов, то я могу записать

C++ Source Code:
1
template<typename ...ids>
2
void foo (const ids&... args){
3
  for(auto& arg: {args...}){
4
    /* do stuff with arg*/
5
    }
6
  }


А можно ли эту конструкцию как-то специализировать для конкретного нетривиального типа под многоточием? Например, я хочу передавать в функцию, пускай, tuple<int,char*,float> — можно-ли написать это в единой конструкции, без привлечения прокси-шаблонов?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 15-10-2019 в 14:17:

О! Шаблоны позволяют var args? Хотя в шестёрке небось не сработает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 30-11-2019 в 01:44:

А может кто ни будь пояснить, почему ptr не изменяется в результате?

C++ Source Code:
1
/* relink data <- ptr */
2
inline void relink
3
(void* ptr){
4
  self.data = (t*)ptr;
5
  ptr = self.data + self.offset[0];
6
  printf("relink %p -> %p\n", self.data, ptr);
7
}

Вызывается, например:
C++ Source Code:
void* ptr = nullptr;
cmp.pparts.relink(ptr);
cmp.pindex.relink(ptr);

А в результате:
C++ Source Code:
relink (nil) -> 0x445c0000
relink (nil) -> 0x2d00

При этом, если возвращать изменённый указатель из функции, то он снаружи нормально присваивается безо всяких проблем. В чём тут дело?

Добавлено 30-11-2019 в 04:44:

ps: или я идиот, или одно из двух...

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 30-11-2019 в 01:51:

thambs
Потому что ты передаёшь указатель по значению, а не по указателю.
Функция должна иметь сигнатуру

C++ Source Code:
void relink(void **ptr)
со всеми вытекающими модификациями.

__________________

xaerox on Vivino


Отправлено thambs 30-11-2019 в 02:01:

XaeroX
Посыпаю голову пеплом, я точно идиот — слона не углядел.
Вот так, можно

C++ Source Code:
void*& ptr

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 30-11-2019 в 02:44:

Цитата:
thambs писал:
Вот так, можно

Так, безусловно, тоже можно, но выглядит менее красиво, и сложнее для пони-мания.

__________________

xaerox on Vivino


Отправлено thambs 30-11-2019 в 03:00:

XaeroX
По-моему лучше, так rvalue туда не пропихнёшь.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Дядя Миша 30-11-2019 в 06:53:

Цитата:
thambs писал:
А может кто ни будь пояснить, почему ptr не изменяется в результате?

ну почему жы, он меняется в результате. Но этот результат доступен только внутри самой функции, ты же скопировал указатель в аргумент. Вот он в аргументе и поменялся. А чтобы поменялся снаружи тебе нужен указатель на указатель или ссылка на указатель.

Цитата:
XaeroX писал:
Так, безусловно, тоже можно, но выглядит менее красиво

меня удалбывает внутри функции постоянно писать *ptr, некрасиво.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 30-11-2019 в 07:36:

Цитата:
Дядя Миша писал:
меня удалбывает внутри функции постоянно писать *ptr, некрасиво.

А не надо постоянно, достаточно написать это один раз.
Мне вообще эта функция не нравится. Какая-то она неправильная, ненормально это - модифицировать тут же и какой-то self, и входные данные, которые внезапно становятся выходными.

__________________

xaerox on Vivino


Отправлено thambs 03-02-2020 в 13:24:

Жесть какая-то, как заранее подмечать такие моменты?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено XaeroX 03-02-2020 в 15:56:

thambs
Прочитал только заголовок, т.к. статья слишком страшно выглядит.
Если это то, о чём я подумал, то в Волатиле это лечится "-fno-strict-aliasing" во всех модулях.

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-02-2020 в 16:47:

thambs эти статьи всегда берут какой-то сферический пример.
Пусть на реальном покажут. Я не знаю как этот эффект правильно называется, но он присущ любому семейству компиляторов, что на искуственно выдуманной конструкции может случится фейл, тогда как на реальных сложнешийх примерах всё в порядке. Более того - баг только на этих примерах и проявляется. Вот я компилятор bsp тестировал на таких вот примерах. Ну и что? вылетел на комнатке из пяти брашей. А сипульчер прекрасно собирается. Эти статьи - они в первую очередь нужны тем, кто компиляторы пишет, ну в качестве багрепортов. Нахрена это пользователю.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено SNMetamorph 12-02-2020 в 12:53:

Кто-нибудь здесь пробовал использовать фреймворк GTK в разработке? Какие есть плюсы/минусы/специфические нюансы?

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено nemyax 12-02-2020 в 13:16:

SNMetamorph
Статической линковки нету, придётся тащить мегабайты какой-то мутной шняги.


Отправлено SNMetamorph 12-02-2020 в 13:22:

Цитата:
nemyax писал:
придётся тащить мегабайты какой-то мутной шняги

Насколько я знаю, с Qt ситуация аналогичная. Я прифигел один раз: скачал программу, а там кутишных дллок почти на 100 мбайт.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено nemyax 12-02-2020 в 13:36:

Если задачи скромные, то вот:
https://hlfx.ru/forum/showthread.php?s=&threadid=5048
Статическая линковка, кроссплатформа, OpenGL, всего пара сотен килобайт плюс к размеру программы.

Добавлено 12-02-2020 в 16:36:

И кресты вместо си.


Отправлено thambs 12-02-2020 в 14:05:

SNMetamorph '
Минусы для пользователя прежде всего.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено SNMetamorph 13-02-2020 в 03:04:

Цитата:
nemyax писал:
Если задачи скромные, то вот:
https://hlfx.ru/forum/showthread.php?s=&threadid=5048
Статическая линковка, кроссплатформа, OpenGL, всего пара сотен килобайт плюс к размеру программы.

Добавлено 12-02-2020 в 16:36:

И кресты вместо си.

А какой-нибудь нормальный конструктор формочек под него имеется? Я ориентируюсь под создание десктопных придожений.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено XaeroX 13-02-2020 в 03:24:

Цитата:
SNMetamorph писал:
Я прифигел один раз: скачал программу, а там кутишных дллок почти на 100 мбайт.

Джек на Qt. Что, сильно много мегабайт занимают кутишные дллки?

__________________

xaerox on Vivino


Отправлено nemyax 13-02-2020 в 06:09:

Цитата:
SNMetamorph писал:
А какой-нибудь нормальный конструктор формочек под него имеется?

В поставке идёт некий fluid.


Отправлено SNMetamorph 13-02-2020 в 06:33:

https://m.habr.com/ru/post/263897/
Что-то это вот тоже не радует.

Добавлено 13-02-2020 в 15:33:

Цитата:
XaeroX писал:
Джек на Qt. Что, сильно много мегабайт занимают кутишные дллки?

Вот только в джеке и как раз нет проблемы в этом плане, других таких программ не помню

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено XaeroX 13-02-2020 в 07:03:

Цитата:
SNMetamorph писал:
других таких программ не помню

Ну другие не парятся, а я перфекционист.

__________________

xaerox on Vivino


Отправлено SNMetamorph 13-02-2020 в 07:33:

Цитата:
XaeroX писал:
Ну другие не парятся, а я перфекционист.

Это ты как так размер дллкам урезал?
Там какая-то модульность есть что ли?

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 13-02-2020 в 09:25:

Эти библиотеки, они же по сути обвёртка над WinForms, чему там тормозить.
Ну может Qt какой все окна через OpenGL рендерит, там да.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 13-02-2020 в 09:58:

Цитата:
SNMetamorph писал:
Это ты как так размер дллкам урезал?
Там какая-то модульность есть что ли?

Пересобрал с нужными мне фичами.
Да, там можно поотключать лишнее разными флагами сборки. Подробно всё описано на офсайте в руководстве по сборке.

Добавлено 13-02-2020 в 16:58:

Цитата:
Дядя Миша писал:
Эти библиотеки, они же по сути обвёртка над WinForms, чему там тормозить.

Кроссплатформенные обычно сами, ну или под виндой частично юзают стандартные контролы.
А в линуксе никаких стандартных контролов нет. Отсюда и проблема: каждый может рисовать такие кнопки, как ему вздумается. На словах - прикольно, а на деле - юзеры путаются.

__________________

xaerox on Vivino


Отправлено SNMetamorph 13-02-2020 в 10:19:

Цитата:
nemyax писал:
В поставке идёт некий fluid.

Он, вроде бы, только для старых версий

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 13-02-2020 в 10:36:

Цитата:
XaeroX писал:
А в линуксе никаких стандартных контролов нет

самаялучшаяосьвообще!

Добавлено 13-02-2020 в 13:36:

Ну собсно, я про это и говорил - зачем серверной оси какие-то контролы? Миднайт коммандер есть, этого вполне достаточно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено nemyax 13-02-2020 в 11:45:

На венде с депрекацией MFC тоже знаитили трудновато говорить о стандартности контролов. Вон даже в хабростатейке результаты для двух "родных" вендовых тулкитов.

Добавлено 13-02-2020 в 14:45:

Кстати по поводу фиговой производительности FLTK. Так как код автора статьи посмотреть уже нельзя, непонятно, грамотно ли он вообще сделал тот грид. Вот что пишут в справке для Fl_Table:

Цитата:

This widget can be used in several ways:
- As a custom widget; see examples/table-simple.cxx and test/table.cxx. Very optimal for even extremely large tables.
- As a table made up of a single FLTK widget instanced all over the table, simulating a numeric spreadsheet. See examples/table-spreadsheet.cxx and examples/table-spreadsheet-with-keyboard-nav.cxx. Optimal for large tables.
- As a regular container of FLTK widgets, one widget per cell. See examples/table-as-container.cxx. Not recommended for large tables.

Может, он как раз пошёл not recommended путём.


Отправлено Дядя Миша 13-02-2020 в 12:38:

Цитата:
nemyax писал:
На венде с депрекацией MFC тоже знаитили трудновато говорить о стандартности контролов

вопще-та контролы, это голый винапи, а MFC прослойка.
Я когда-то лепил окошки на чистом си, безо всяких библиотек, но очень устал от этого и возненавидел вообще все окна, в принципе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено SNMetamorph 13-02-2020 в 13:28:

Захотел проверить какие вообще инструменты для клепания формочек предоставляют обе библиотеки - не нашел бинарников на у gtkmm, ни у FLTK.
Это видимо какая-то болезнь опенсорца, что нет элементарных инструкций по установке и/или ссылок на готовые бинарники.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено nemyax 13-02-2020 в 13:42:

SNMetamorph
Вообще-то всё ясно расписано в ридмишке, что лежит в архиве с сорцами.
А какие ты хотел бинарники у дев-тулкита?


Отправлено SNMetamorph 13-02-2020 в 13:54:

Собрал, в общем, из бинарников. По ходу компиляции никаких проблем не было. Заглянул в папку с программами-примерами и мне стало грустно.
Это ж как VGUI голдсурсовский.


Добавлено 13-02-2020 в 22:53:

https://www.opennet.ru/opennews/art.shtml?num=38195
Похоже, от GTK+ придётся так же отказаться в пользу Qt, по той же самой причине.

Добавлено 13-02-2020 в 22:54:

А вообще странно. GIMP под винду вполне себе симпатично выглядит.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 13-02-2020 в 14:36:

Вот, собственно по этой причине и я предпочитаю MXTK, который обвёртка над WinForms.
Но да, редактора там нету, вручную приходится всё подгонять.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 13-02-2020 в 17:14:

Цитата:
Дядя Миша писал:
Вот, собственно по этой причине и я предпочитаю MXTK, который обвёртка над WinForms.

Ну это пока тебе не понадобилась кроссплатформенность.

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-02-2020 в 19:14:

XaeroX я бы сказал - пока мне не понадобилось написать большое приложение с интерфейсом. А так, вайн спровляется.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 14-02-2020 в 05:03:

Цитата:
Дядя Миша писал:
вайн спровляется.

Вайн спровляется ровно до тех пор, пока не нужна 3D графика. Или пока приложение не требует каких-то особенных драйверов. Вообще, ИМХО, линуксоиды любят страдать, раз выбрали эту ОСь. Элементарные вещи, что есть в винде искаропки, там надо делать ручками. Причём в каждой DE по-разному. Конечно, это не проблема линукса, как таковая. Это проблема драйверописателей и проприетарщины. Макось, имея схожую структуру и логику, намного стабильнее. И под неё больше софта.
Цитата:
SNMetamorph писал:
Это видимо какая-то болезнь опенсорца, что нет элементарных инструкций по установке и/или ссылок на готовые бинарники.

А это смотря какой проект. Девкит типа FLTK или QT, это я пони-маю. Но вот, буквально в начале месяца наткнулся на MrQuake2. Multi-Renderer Quake 2. DX 10-11-12, вроде бы. И что вы думаете? Компильте сами, будьте так любезны. Интересно, что бы было, если б Ксер выложил QindieGL таким образом? Много бы геймеров им воспользовались? А если бы ДМ в своё время выпустил BS Patch только в виде сорцев?


Отправлено XaeroX 14-02-2020 в 05:06:

Цитата:
Ku2zoff писал:
Интересно, что бы было, если б Ксер выложил QindieGL таким образом? Много бы геймеров им воспользовались?

Ноль, потому что те, кто сидит под виндой, привыкли к готовым бинарям, а линуксоидам этот проект по очевидной причине не нужен.

__________________

xaerox on Vivino


Отправлено Ku2zoff 14-02-2020 в 06:14:

Цитата:
XaeroX писал:
Ноль, потому что те, кто сидит под виндой, привыкли к готовым бинарям

Именно поэтому ноль человек пользуется форками вроде MrQ2. И всяким "интересным" софтом. Качают кодеры и программисты для саморазвития, сорцы почитать. Половина гитхаба и треть сорцфорджа - то же самое. Просто нет собранных бинарников. Линуксоидам в этом плане полегче. Сама ОСь предполагает сборку модулей ядра из сорцев, чтобы, например, видеодрайвер заработал. Так что для них хотя бы инструкции есть. Я пытался собрать MrQ2, но не захотел качать SDK Windows 10, и забросил. Что мне надо, прекрасно собирается с SDK Wundows 7 и базовым набором хедеров и либ VS 2017. Качать ещё гигабайты мусора ради сборки рендерера для ку2 - идиотизм. Ну а аффтару сего чуда я бы пожелал где-нибудь найти моск. Потому что не так уж трудно выложить на гитхабе пару дллок весом не более 500 кб. Всё таки, он пишет форк игрового движка. Чтобы иметь фидбек и тестеров, надо чтобы этим тестерам форк был легко доступен.


Отправлено SNMetamorph 14-02-2020 в 11:42:

В общем поковырялся и пришёл к такому заключению:
FLTK - не удоволетворяет требованиям к внешнему виду и удобству разработки
gtkmm - фиг заюзаешь под виндусом без тонны всяких зависимостей в виде mingw/msys2
Остаётся только Qt и GTK, наверное всё же в пользу первого.

Добавлено 14-02-2020 в 20:42:

Вот пример того, как предлагают прикрутить GTK к виндоусу:
https://wiki.gnome.org/Projects/GTK...ationOfGTKStack

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено thambs 30-07-2020 в 15:07:

Вопрос знатокам qt. Я раньше с гуём дел не имел, а тут ВНЕЗАПНО понадобилось. Вообщем, нужен мне какой-ни будь виджет, в котором можно удобным образом задать диапазон двух чисел, как мышкой, так и точно вручную. Что-то вроде продвинутой версии скроллбара с двумя бегунками. Есть что ни будь такое готовое, или из чего можно такое собрать?

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Lev 31-08-2020 в 06:19:

Задам вопрос тут, так как в инете не обнаружил внятного ответа: кто-нибудь знает, как установить visual studio 6 на вин10 или вин7?


Отправлено Crystallize 31-08-2020 в 06:55:

На вин7 вроде без проблем ставится, просто на некоторых системах может глючить, скажем, открытие проектов.


Отправлено Ku2zoff 31-08-2020 в 07:20:

Lev скачай заархивированную и уже установленную. Думаю, найдётся. Распкакуй и пользуйся. Есть статья на тему установки VB 6.0 на десятку, может быть чем-то поможет.


Отправлено Cybermax 31-08-2020 в 07:28:

Скачал оригинальный образ Visual.C++.6.0 Professional Edition, запустил setup.exe, серийник единицы, поругался немного на недостающие какие-то pdf, установился. Сорцы П2 открывает. Win7 максимальная.


Отправлено Lev 31-08-2020 в 08:36:

А MSDN обязательно ставить?


Отправлено Дядя Миша 31-08-2020 в 09:19:

Нет

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 16:29.
Показать все 123 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024