C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. No Ads, offtop, flood 2. Полные правила тут https://t.me/ProCxx/259155 Объявления о вакансиях,эвентах - в лс @AlexFails или @MasterZiV канал вакансий https://t.me/ProCxxJobs
Не, сорри, вроде я рано отчаялся.
Вроде можно сделать, если в структуре Foo методы определить Статик шаблонами от data_
Тогда их можно кодогенерировать от разных типов data_
Ура c++!
В имеющейся реализации действительно "говно мамонта родом из C".
Ни два ни полтора.
И плюс ко всему вышесказанному крамольная мысль:
Макросы - это кодогенерации, но их функциональность недостаточна.
Нужны "более мощные" макросы.
Текущий вид рефлексии как будто только для перекладывания жсонов годится
Читать полностью…Все. Тупик. Я в печали от этой вашей рефлексии.
У меня есть объект
struct Foo
{
std::string data_;
void SetData(..);
const std::string& GetData() const;
}
У меня есть tuple с указателями на методы Foo описывающие его интерфейс.
А теперь я хочу сделать объект
struct FooRef
{
std::string& data_;
? те же методы
}
или
struct FooConstRef
{
const std::sting& data_;
? только const методы
}
Для оригинального Foo у меня есть все. Я могу отфильтровать tuple только на константные методы.
Я могу поменять тип класса в tuple на FooRef или FooConstRef.
Но!
Я не могу заставить компилятор сделать эти новые методы и получить их указатели!
Даже с рефлексией!
И что?
Остаётся только тупая внешняя кодогенерации.
Кодогенерации рулит!
Мы пришли к тому что имели и боялись признать - c++ без кодогенерации ущербен и никакая рефлексия этой проблемы не исправит.
gdb --versionЧитать полностью…
Python path configuration:
PYTHONHOME = 'C:/Python39'
PYTHONPATH = (not set)
program name = 'C:/msys64/mingw64/bin/python.exe'
isolated = 0
environment = 1
user site = 1
safe_path = 0
import site = 1
is in build tree = 0
stdlib dir = 'C:/Python39/lib/python3.12'
sys._base_executable = 'C:/msys64/mingw64/bin/python.exe'
sys.base_prefix = 'C:/Python39'
sys.base_exec_prefix = 'C:/Python39'
sys.platlibdir = 'lib'
sys.executable = 'C:/msys64/mingw64/bin/python.exe'
sys.prefix = 'C:/Python39'
sys.exec_prefix = 'C:/Python39'
sys.path = [
'C:/Python39/lib/python312.zip',
'C:/Python39/lib/python3.12',
'C:/Python39/lib/python3.12/lib-dynload',
]
Python initialization failed: failed to get the Python codec of the filesystem encoding
C:\msys64\mingw64\bin\gdb.exe: warning: Python failed to initialize with PYTHONHOME set. Maybe beca
use it is set incorrectly? Maybe because it points to incompatible standard libraries? Consider chan
ging or unsetting it, or ignoring it using "set python ignore-environment on" at early initializatio
n.
GNU gdb (GDB) 16.3
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Попробовал, говорит не умеет.
./0c46a68d-88f8-46df-9058-f57cbd71d3d8.dmp" is not a core dump: file format not recogЧитать полностью…
nized
В Советской России не ты кодишь на C++, а C++ кодит тебя
Читать полностью…действовал по комиксу из xkcd как выучить плюсы за 21 день?
Читать полностью…Да не.
Все нормально.
Я ошибся.
Но в конце концов я понял c++ как язык программирования.
Долгое время я его считал не языком, а "инструкцией по эксплуатации компилятора".
Все дело в том, что я не мог догнать, что такое шаблоны.
С поверхностного взгляда это и не данные, и не методы, а непонятно что - скрипты кодогенерации.
Но теперь я понял, что именно шаблоны делают c++ полноценным языком программирования.
Именно благодаря шаблонам я могу оперировать методами, как полноценными объектами первого рода.
Я могу их создавать:
- Пусть Foo - это класс, тогда
Foo* pf = new Foo();
это создание элемента данных.
- Пусть Bar<typename> - это шаблон пункции, тогда
auto* pb = /*new"/ Bar<int> - это создание метода.
Материализация его при компиляции.
И логика та же и синтаксис похожий.
Короче.
Я понял c++.
Классный язык.
Ну кодогенерация по мощности слегка мощнее рефлексии потому что рефлексия способна обрабатывать лишь то что уже есть в программе а кодогенерация генерирует даже то чего ещё там нет поэтому ты сравниваешь некорректно .
Читать полностью…Ребят, кто то может помочь, такая проблемка, пул алокатор мой работает с glibc malloc а с jemalloc - segfault
Читать полностью…Кодогенерация очень неудобна, когда потенциально хост != таргет, ибо компилить тогда приходится дважды
Читать полностью…никакой другой реализации нет и не будет. Оно существует в плюсах только для совместимости с C
Читать полностью…Вот именно моё имхо - отказываться от идеи кодогенерации нельзя!
Кодогенерации - это нормально и приемлемо там где она просится.
Рефлексия ее никогда не заменит.
скорее рефлексия такая себе получилась, а не кодген нужен
Читать полностью…https://github.com/ssbssa/gdb этот запускаете или штатный?
Читать полностью…Ну тот что в комплекте mingw должен, там же код собирается gcc
Читать полностью…