gpt4 book ai didi

c++ - 我可以在范围内创建指向模板函数的指针吗?

转载 作者:太空狗 更新时间:2023-10-29 23:39:07 26 4
gpt4 key购买 nike

我想创建一个指向模板函数的指针:

template <class T>
void foo(T x){}

int main()
{


template <class T>
void (*ptr)(T);


return 0;
}

我得到上面的错误:error C2951: template declarations are only permitted at global or namespace scope

所以我可以通过在全局范围内声明指向模板函数的指针来修复它并且它工作正常:

template <class T>
void foo(T x){ cout << "foo()" << endl;}

template <class T>
void (*ptr)(T);


int main()
{

ptr = foo;
(*ptr)(7);

return 0;
}
  • 有没有办法像第一个代码那样在范围内声明指向模板函数的指针?

最佳答案

函数模板不是函数。并且函数指针只能分配给匹配签名的函数。

在此声明中:

template <class T>
void foo(T x){ cout << "foo()" << endl;}

foo 是一个函数模板。直到它被实例化后才会产生一个函数。因此,您只能获得指向 foo 实例化的函数指针。


假设你有一个函数指针 Ktr,你只能将它分配给 foo 的实例化,如下所示:

void (*Ktr)(int);
Ktr = foo<int>;

在此声明中:

template <class T>
void (*ptr)(T);

您声明了一个 variable template (C++14)T 类型的对象作为唯一参数的函数指针类型。

关于c++ - 我可以在范围内创建指向模板函数的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com