7
詮釋我有一個函數:不允許隱式轉換爲在函數調用
void foo(int n) {
std::cout << "foo(int)\n";
}
,可以使用不同的參數調用,它可以是char,雙,浮法等:
foo(123); // 1
foo('c'); // 2
foo(0.2); // 3
foo(0.2f); // 4
// ...
。 ..但我想只允許int
參數(字面或變量),所以2,3,4,...以上將是非法的。我目前的解決辦法是刪除這些重載:
void foo(char) = delete;
void foo(float) = delete;
void foo(double) = delete;
但重載這個名單可以很長,而且總有人可以寫一個類將隱式轉換爲int
什麼都會允許使用我的int
唯一功能所以我發現寫作(而不是長明確的清單):
template<typename T>
void foo(T) = delete;
按預期工作。
使用上面的模板有什麼缺點嗎?或者也許有更好的方法來解決這個問題?
什麼_wrong_與非(真)'int'參數?如果這些值超出了你函數的範圍,你最好'拋出'異常。 – edmz
@AlgirdasPreidžius唯一的區別是,這個問題基本上要求在這個問題中給出的答案潛在的缺點。 – BoBTFish
即使這個問題寫得很好,它並沒有顯示任何研究嘗試,因爲搜索確切的標題,顯示了幾個關於同一問題的問題。 –