当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我可以在范围内创建指向模板化函数的指针吗?》经验,为你挑选了1个好方法。

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

template 
void foo(T x){}

int main()
{


template 
void (*ptr)(T);


    return 0;
}

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

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

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

template 
void (*ptr)(T);


int main()
{

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

    return 0;
}

有没有办法在像第一个代码中的范围内声明一个指向模板化函数的指针?

WhiZTiM.. 10

一个函数模板不是一个函数.和函数指针只能分配给匹配签名的功能.

在这个声明中:

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

foo是一个功能模板.直到在生成函数之前实例化它.因此,您只能获得指向实例化的函数指针foo.


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

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

在这个声明中:

template 
void (*ptr)(T);

您声明了一个函数指针类型的变量模板(C++ 14),它将类型的对象T作为唯一参数.



1> WhiZTiM..:

一个函数模板不是一个函数.和函数指针只能分配给匹配签名的功能.

在这个声明中:

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

foo是一个功能模板.直到在生成函数之前实例化它.因此,您只能获得指向实例化的函数指针foo.


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

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

在这个声明中:

template 
void (*ptr)(T);

您声明了一个函数指针类型的变量模板(C++ 14),它将类型的对象T作为唯一参数.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有