Я читаю некоторый исходный код проекта Chromium и обнаружил одну вещь, которую я не могу понять, есть шаблон, который принимает один параметр и частичную специализацию, как показано ниже:
template <class Sig>
class Callback;
template <typename R, typename A1,typename A2>
class Callback<R(A1,A2)>
{
};
Тогда я могу создать объект, как в следующих примерах:
Callback < float ( int , string ) > myCallback;
Callback < int ( float , int ) > myCallback2;
etc.
Я пытаюсь понять это выражение «float (int, string)», что это вообще значит? Это какая-то подпись функции без имени ?? Я полностью сбит с толку.
Может кто-нибудь попытаться объяснить, как это работает?
заранее спасибо
Это тип функции. float(int,string)
описывает функцию, которая принимает два аргумента, один из типа int
и один из типа string
и возвращает float
,
Вы можете написать typedef для этого типа функции следующим образом:
typedef float function_type(int, string);
Вы можете сделать это в C, но в C есть только одна вещь, которую вы могли бы сделать с типом функции: создать указатель на него:
void f(function_type*);
В C ++ такой тип также может использоваться в качестве аргумента шаблона.
Это означает, что это вызываемый тип, который необходимо передать этому шаблону, то есть функтор или указатель функции или std::function<float(int,string)>
в вашем конкретном случае.
Это тип функции. Возможно, вы уже знакомы с указателями / ссылками на функции: int(*)(float, int)
или же int(&)(double)
, Удалить *
или же &
и вы остались с типом: int(float, int)
или же int(double)
, так далее
Вы можете также определить тип функции:
typedef int FuncType(short);
FuncType* funcPtr; // pointer to function that takes a short and returns an int