2015-09-05 43 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

相關問題