↑↑↓↓←→←→ⒷⒶ Войти !bnw Сегодня Клубы

Вот есть такая штука:

template<class F>
void foo(F f) {
    for(int i = 0; i < 100; i++)
    f(i);
}

Наверное, это очевидно, но gcc не инлайнит¹ вызов f, если f - это функция. Поэтому приходится писать

template <void f(int)>
void foo() { /* ... */ }

Либо оборачивать f в какую-нибудь лямбду или класс с оператором ().


1) На самом деле инлайнит, если foo() используется только один раз в коде.

#OC494I / @fix / 3910 дней назад

>c++
#OC494I/JX1 / @krkm / 3910 дней назад
@kurkuma > отвечать гринтекстом
#OC494I/LJB / @fix --> #OC494I/JX1 / 3910 дней назад
@fix > 2014
#OC494I/VI9 / @238328 --> #OC494I/LJB / 3910 дней назад
@fix >а то что xDDD
#OC494I/URI / @krkm --> #OC494I/LJB / 3910 дней назад
@kurkuma что?
#OC494I/ZHG / @238328 --> #OC494I/URI / 3910 дней назад
@238328 >что?
#OC494I/H10 / @krkm --> #OC494I/ZHG / 3910 дней назад
#OC494I/5JB / @238328 --> #OC494I/H10 / 3910 дней назад
а сфига бы он вообще должен его инлайнить? Ты просто делаешь вызов метода класса. Неоходимость инлайна ни разу не очевидна. >Либо оборачивать f в какую-нибудь лямбду или класс с оператором (). Так у тебя ж в коде УЖЕ идет вызов оператора (). Или я что-то упускаю в этих ваших колбасных обрезках?
#OC494I/WJP / @macro / 3910 дней назад
@macro > а сфига бы он вообще должен его инлайнить? Не должен, но мне хотелось бы. > Ты просто делаешь вызов метода класса. Тут нет методов. > Или я что-то упускаю в этих ваших колбасных обрезках? Разница в том, что в первом случае шаблон раскрывается в `void foo(void f(int))`, т.е. принимает указатель на функцию и при каждом вызове разыменовывает; а во втором случае адрес функции известен уже на этапе компиляции.
#OC494I/5DI / @fix --> #OC494I/WJP / 3910 дней назад
@macro просто уважаемые пацаны ПИСАЛИ В КНИГАХ 90-х, мол типа если заинлайнить -- будет 100% *быстрее*
#OC494I/GQ2 / @ulidtko --> #OC494I/WJP / 3909 дней назад
@ulidtko и чо с ними стало потом? // в стартап взяли, надеюсь?
#OC494I/T40 / @238328 --> #OC494I/GQ2 / 3909 дней назад
@ulidtko > уважаемые пацаны > В КНИГАХ 90-х Ох уж эти лихие девяностые. > будет 100% быстрее В моём случае будет. Делаю штуку, которая должна считать разные клеточные автоматы. Реализую шаблон для каждой окрестности (например, для https://www.economicsnetwork.ac.uk/cheer/ch17/hand1.gif ); этот шаблон инстанцируется функцией от пяти или от девяти переменных. Эти функции-то совсем примитивные будут, грех не заинлайнить.
#OC494I/FM3 / @fix --> #OC494I/GQ2 / 3909 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.