2016-10-28 3 views
6

В следующем коде на C++ что означает double (*) double? Что это за тип возврата?Определение типа C++ неясно

auto get_fun(int arg) -> double (*)(double) // same as: double (*get_fun(int))(double) 
{ 
    switch (arg) 
    { 
     case 1: return std::fabs; 
     case 2: return std::sin; 
     default: return std::cos; 
    } 
} 
+4

go C++ 11 all the way: 'auto get_fun (int arg) -> auto (*) (double) -> double' – bolov

+0

См. Также [Как интерпретировать этот тип C++?] (Http: // stackoverflow .com/q/37844752/1314743) и внешний [как интерпретировать сложные объявления C/C++] (http://www.codeproject.com/Articles/7042/How-to-interpret-complex-CC-declarations). –

+1

@bolov это непристойно: D – Quentin

ответ

7

double (*)(double) это указатель функции подписи для функции, которая принимает один аргумент double и возвращает double. Вообще

X (*)(A, B, C) // any number of args 

является указателем на функцию, которая принимает арг типов (A, B, C) и возвращает значение типа X, например,

X my_func(A, B, C) { 
    return X(); // assuming this makes sense 
} 

будет подписи выше.

Итак, в вашем случае get_fun - это функция, которая возвращает указатель на функцию.

2

double (*)(double) это тип, представляющий указатель на функцию, принимающую double и возвращающий double.

Смежные вопросы