我想要一個具有具體類型的通用引用參數的函數。我希望它是通用引用,所以當我不想檢查存儲在其中的值時,我可以傳遞一個臨時對象。具體類型的通用引用
這裏是例子:
bool bCompareData(const uint8_t *arg_0, const uint8_t *arg_1, size_t &szComparedData)
{
size_t &i = szComparedData;
for (; arg_1[i]; ++i)
if (arg_1[i] != arg_0[i])
return false;
return true;
}
和可能的函數調用:
bCompareData(Obj.uIdObject.data(), Ref.uIdTargetObject.data(), size_t()) // here we are passing a temporary (rvalue)
/*________________________*/
size_t lval;
bCompareData(Obj.uIdObject.data(), Ref.uIdTargetObject.data(), lval) // here we are passing a named variable (lvalue)
使用在第一個函數調用編譯器上面的函數聲明會給出一個錯誤,如果我改變「爲size_t & szComparedData「to rvalue reference」size_t & & szComparedData「它會在第二次調用失敗。
現在我需要的是通用引用,但我也想在我的參數上使用具體類型,而不是使用模板。
我使用VC++ U3 2013編譯器。
MSVC是否允許第一個呢? (將非const引用綁定到臨時) – 2014-11-04 19:08:24
您似乎希望最後一個參數是可選的。爲什麼不簡單地提供一個沒有這個參數的重載,並用一個本地的虛擬參數調用另一個版本? – 2014-11-04 19:09:07
@FrançoisMoisan:傳遞一個臨時丟棄結果,所以可選的有意義,但通過一個臨時也允許不同的起點。我不確定可選參數是否真的是他想要的。 – 2014-11-04 19:11:07