История изменений
Исправление
MOPKOBKA,
(текущая версия)
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать +1 параметр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
IntPrintable, FloatPrintable как раз образуют пару (T, vtable).
Я вот выше как раз код на ассемблере кидал, чистого неизвестного виртуального вызова:
mov QWORD PTR [rsp], OFFSET FLAT:"vtable for PrintableInt"+16
mov DWORD PTR [rsp+8], 10
call "test1(Printable const&)"
Вот пример с std::string, тоже всего 1 доп.параметр: https://godbolt.org/z/ToWbn3cjx
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
IntPrintable, FloatPrintable как раз образуют пару (T, vtable).
Я вот выше как раз код на ассемблере кидал, чистого неизвестного виртуального вызова:
mov QWORD PTR [rsp], OFFSET FLAT:"vtable for PrintableInt"+16
mov DWORD PTR [rsp+8], 10
call "test1(Printable const&)"
Вот пример с std::string, тоже всего 1 доп.параметр: https://godbolt.org/z/ToWbn3cjx
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
Вот пример с std::string, тоже всего 1 доп.параметр: https://godbolt.org/z/ToWbn3cjx
IntPrintable, FloatPrintable как раз образуют пару (T, vtable).
Я вот выше как раз код на ассемблере кидал, чистого неизвестного виртуального вызова:
mov QWORD PTR [rsp], OFFSET FLAT:"vtable for PrintableInt"+16
mov DWORD PTR [rsp+8], 10
call "test1(Printable const&)"
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
IntPrintable, FloatPrintable как раз образуют пару (T, vtable).
Я вот выше как раз код на ассемблере кидал, чистого неизвестного виртуального вызова:
mov QWORD PTR [rsp], OFFSET FLAT:"vtable for PrintableInt"+16
mov DWORD PTR [rsp+8], 10
call "test1(Printable const&)"
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
IntPrintable, FloatPrintable как раз образуют пару (T, vtable).
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
IntPrintable, FloatPrintable как раз образуют пару (T, Vtable).
Исправление
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.
IntPrintable это ссылка на объект которую создавать и не надо, объект у нас и так есть, и vtable который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.
Исходная версия
MOPKOBKA,
:
ну такой синтаксис, чтобы числа принтовать - это перегиб.
и ты не добился простой формы вызова
Я не цппист, явно же есть возможность сделать автоконверт типа в другой. Хотя с явным указанием даже преимущество есть, можно делать несколько impl для одного struct. Мне интереснее семантика, про синтаксис к волшебникам С++.
Ты просто сделал обертки, с общим методом print. Чтобы его вызвать нужно создать временный обьект c vmt.
Нет нет нет, как и в Rust, нужно будет задействовать 1 регистр что бы положить в него таблицу о которой ты говорил (vtable). То есть вся операция заключается в добавлении 1 теневого параметра.