获取在C ++ 11中具有可变参数模板的函数的地址

超级用户

当使用可变参数模板保存函数的地址时,g ++编译器(版本4.8.2)输出以下错误:

没有上下文类型信息的重载函数的地址

有问题的代码:

template<typename... Args>
void redirect_function(const char *format, Args... args)
{
    pLog->Write(format, args...); // or: printf(format, args...);
}

void *fnPtr = (void *)&redirect_function; // The error occurs here.

这是我在其他地方使用的方法:

typedef void (*log_bridge)(const char*, ...);
log_bridge LogWrite;
LogWrite = (log_bridge)fnPtr;

我对此没有其他可能性,所以请不要提出完全不同的解决方法。

luk32

好吧。很简单为什么不行。你有明显的模棱两可。redirect_function不是函数;作为所有模板函数,它更像是模板针对不同类型的参数生成的一组重载。

该函数需要首先实例化才能获得其地址,并且您没有为此提供任何必要的信息。

换句话说,问题是您可能无法知道redirect_function问题线路上应使用哪个具体的重载

您唯一可以做的就是显式提供模板参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有依赖类型的c ++ 11可变参数函数模板是否不明确?

C ++中没有参数可变参数模板函数

C ++ 11:可变参数模板函数参数的数量?

从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数

C ++:具有可变参数模板的成员函数指针参数

调用类内的函数的C ++ 11可变参数模板

通过可变参数模板的C ++ 11构造函数继承

C ++ 11可变参数模板函数存储

具有可变参数模板和变量捕获的C ++ 11“重载lambda”

在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

具有双打的C ++可变参数模板

C ++创建具有可变参数模板方法的接口

具有元组的C ++可变参数模板

C ++ 11中的可变参数模板和多重继承

用可变参数模板在C ++中包装函数指针

在C ++中没有匹配的构造函数来初始化可变参数模板

c ++ 11递归可变参数模板

C ++在可变参数模板中获取许多元素

在C ++中使用带有参数类型检查的可变参数模板在编译时获取函数的参数数量

在C ++中的可变参数模板中获取可变参数size_t ...参数的总和

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

具有std :: enable_if的C ++可变参数模板部分模板专业化

调用可变参数函数模板时C ++ 11模棱两可的重载

带有可变参数模板的标记分发,C ++ 11

C ++模板元编程,带有可变参数模板以执行结构中特定成员的操作

c ++ 11可变参数模板无法编译

C ++ 11:可变参数模板推导逻辑

C ++ 11可变参数模板和std :: endl

C ++ 11翻译可变参数模板以推断类类型