#cpp #функции #шаблоны_с++
Как в C++ определить сигнатуру функции, переданной в шаблон другой функции? Делаю так: #includetemplate struct Signature; template struct Signature { using RetType = R; using Arguments = std::tuple ; }; template void test(Func f) { using Sig = Signature ; Sig s; //Error: Sig - undefined struct } double square(double x) { return x * x; } int main() { using Sig = Signature ; Sig s; //ok test(square); } Вот что меня смутило в логе компиляции: error C2079: 's' uses undefined struct 'Signature ' with [ Func=double (__cdecl *)(double) ] Появилось (__cdecl *). Что оно вообще означает, и как тогда определить сигнатуру в test(Func f)?
Ответы
Ответ 1
Надо добавить специализацию для указателя на функцию: templatestruct Signature { using RetType = R; using Arguments = std::tuple ; }; Это нужно потому, что после передачи функции в качестве параметра в test она неявно преобразуется в указатель и тип Func будет на самом деле указателем на функцию.
Комментариев нет:
Отправить комментарий