LINUX.ORG.RU

История изменений

Исправление 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&)"
Сначала ложим vtable, потом ложим само число. Это же твоя пара как ты и хотел.

Вот пример с 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&)"
Сначала ложим vtable, потом ложим само число. Это же твоя пара как ты и хотел.

Вот пример с 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&)"
Сначала ложим vtable, потом ложим само число. Это же твоя пара как ты и хотел.

Исправление 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&)"
Сначала ложим 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 который уже создан, осталось положить к вызову виртуальной функции ссылку на нее.

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 теневого параметра.