【发布时间】:2018-06-17 04:49:11
【问题描述】:
我有一个导出一元函数的共享库,例如:
extern "C" void foo(int);
extern "C" void zoo(double);
该库由不支持 C++11 的编译器使用。我想从函数名称中静态推断结构中的函数类型。
我会写:
template <typename T, void(*)(T)> struct A{ typedef T arg_t; };
为此我必须在实例化模板时明确指定类型T,即我必须写
A<int, &foo>
而不仅仅是
A<&foo>
鉴于此信息嵌入在指针类型中,有没有办法静态提取?
【问题讨论】:
-
直到 C++17 才添加对
A<&foo>之类的支持。如果没有 C++11,我认为在标准 C++ 中是不可能的。 -
这可能是 XY 问题。如果你写一个助手
template<typename T> T get_return_type(void(*)(T)),你可以写decltype(get_return_type(&foo))。 -
@MSalters:如果在没有 C++11 的情况下只有
decltype可用,那将是一个解决方案。 -
您可以在函数模板中执行此操作,但不幸的是,否则不能。