класс — C ++ поможет понять частичную специализацию

Я читаю некоторый исходный код проекта 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)», что это вообще значит? Это какая-то подпись функции без имени ?? Я полностью сбит с толку.

Может кто-нибудь попытаться объяснить, как это работает?

заранее спасибо

2

Решение

Это тип функции. float(int,string) описывает функцию, которая принимает два аргумента, один из типа int и один из типа stringи возвращает float,

Вы можете написать typedef для этого типа функции следующим образом:

typedef float function_type(int, string);

Вы можете сделать это в C, но в C есть только одна вещь, которую вы могли бы сделать с типом функции: создать указатель на него:

void f(function_type*);

В C ++ такой тип также может использоваться в качестве аргумента шаблона.

3

Другие решения

Это означает, что это вызываемый тип, который необходимо передать этому шаблону, то есть функтор или указатель функции или std::function<float(int,string)> в вашем конкретном случае.

2

Это тип функции. Возможно, вы уже знакомы с указателями / ссылками на функции: 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
1
По вопросам рекламы [email protected]