2015-09-05 42 views
1

是否有可能使用特征或其他方法来确定函数(或方法)的值参数是否被声明为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...>; }; 
+4

参数的顶级'const'在函数的类型中被忽略。 – chris

+0

这是什么用例?如果(!is_const(x))x = 42'尝试'不会编译,即使'is_const'可以工作。 –

+1

如果单个const参数不会被忽略,那么该特征看起来像这样http://coliru.stacked-crooked.com/a/b1316c1ba5e284c4。 –

回答

1

不,主要是因为没有办法确定函数可以采用什么参数。即使在模板等简单情况下,您的查询也不明确,即使正常的推导规则会使参数为非常量,也可以使用常量类型显式实例化模板,更不用说重载和类似的问题。

在您可以询问参数是否为const之前,您必须知道参数是什么,这是不可能的。

+0

你的意思是我必须知道*参数*是什么?我确实知道这些论点,但这也没有帮助。不管怎么说,还是要谢谢你。 – user2023370

+0

不,我的意思是参数。 – Puppy

+0

我知道参数。我可以问问他们现在是否是常客吗? – user2023370

相关问题