LINUX.ORG.RU

Сокращения в С++

 ,


0

1

Как сократить функцию и прочее в С++? То есть подменить длинную строку на более короткую.

Например

"function(one, two)" "func";

int main() {

double something = func;

/*вместо double something = function(one, two)*/

}


Последнее исправление: puding (всего исправлений: 1)

Сделать две строки вместо одной - сомнительное сокращение.

goroskob
()

Для

int someFunctionWithAReallyLongName (int a, int b, char *c)

можно

auto f = someFunctionWithAReallyLongName;
int bar = f(1, 2, "baz");

или олдовенько

typedef int (*fcn) (int a, int b, char *c);
fcn f = someFunctionWithAReallyLongName;
int bar = f(1, 2, "baz");
yoghurt ★★★★★
()
Ответ на: 😱 от Stil

Упс, надо было местами переставить, теперь робит, спс.

#define func function(one, two)
puding
() автор топика

Троллейбус из хлеба

Midael ★★★★★
()

Давно я так не извращался, но пожалуйста. Хозяин-барин:

#include <stdio.h>

typedef double dbl;
typedef double(*fn)(int, int);

double
function(int a, int b)
{
        return a + b;
}

int
main()
{
        fn f = function;
        dbl d = f(1, 2);
        printf("%f\n", d);
        return 0;
}

beastie ★★★★★
()
double function (int one, int two){
  return a+b;
}

inline double func(int one, int two){
    return function(a, b);
}
next_time ★★★★★
()
Последнее исправление: next_time (всего исправлений: 2)
Ответ на: комментарий от yoghurt

auto f = someFunctionWithAReallyLongName;

Только если имя someFunctionWithAReallyLongName не перегружено, не является шаблоном, не находится через ADL и не является функцией-членом (и вызывается на this).

Begemoth ★★★★★
()

В общем случае:

template<typename... Args>
auto func(Args... args)
{
  return function(std::forward<Args>(args)...);
}
Begemoth ★★★★★
()
#include <functional>
#include <iostream>


void function(int x, int y) {
    std::cout << "called function" << std::endl;
}

int main() {
    int one {1}, two {2};

    auto something1 = [&] { function(one, two); };
    auto something2 = std::bind(&function, one, two);

    something1();
    something2();
}
hlebushek ★★
()

А если нужно чтобы неприменно работало без круглых скобочек вокруг правой части

double something = func;
То можно func сделать оберткой над std::bind с перегруженным operator double

hlebushek ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.