是否可以使用特征或其他方法来确定函数(或方法)的值参数是否被声明为const?例如,在下面的代码中,fn_params
可用于查找第一个参数的const int *
类型;但是第二个参数仅被识别为具有类型double
。
float foo(const int *, const double) { return 7.6f; }
template <typename T, typename ...Ts>
struct fn_params<T(*)(Ts...)> { using type = std::tuple<Ts...>; };
答案 0 :(得分:1)
不,没有,主要是因为无法确定函数可以采用的参数。即使在像模板这样的简单情况下,你的查询也是模棱两可的,即使正常的推导规则会使参数成为非常量,更不用说重载和类似的事情,也可以用const类型显式地实例化。
在询问参数是否为常数之前,您必须知道参数是什么,这是不可能的。