考虑一个模板类,如:
template<typename ReturnType, ReturnType Fn()>
class Proxy
{
void run()
{
ReturnType ret = Fn();
// ... do something ...
}
};
// and a functions
int fn1() { return 5; }
float fn2() { return 5; }
这可以通过使用实例化:
Proxy<int, &fn1> p1;
但是显式声明返回值类型似乎是不必要的。我想要实现的是:
someProxyInstantation<&fn1> p1;
someProxyInstantation<&fn2> p2;
不幸的是,我不是 c++ 期望的,这似乎是语言的一个隐藏角落(至少对我来说)。
如果我可以从指向函数的指针获取其类型 - 类似于: std::tr1::result_of<&fn>::type // 错误 1 错误 C2923: 'std::tr1::result_of' : 'fn1 ' 不是参数 '_Fty' 的有效模板类型参数
该错误是有道理的,因为该参数根本不是“类型”
C++0x 有 decltype(&fn1) 但那是几年后的事了。
在 C++03 (+ tr1) 中有什么方法可以做到这一点?
限制: - 我不想传递函子,f1 和 f2 必须保留具有返回值的全局函数(不能将其移动到参数)。)