我正在編寫綁定SQL參數的函數,並希望使用標籤調度。所以我寫了這個代碼:標籤調度中的轉發參數
class OraclePreparedStatement
{
public:
template<typename T>
void bind_param(uint32_t col_index, T&& param)
{
bind_param_impl(col_index, std::forward(param),
std::is_integral<std::remove_reference_t<T>>());
}
private:
template<typename T>
void bind_param_impl(uint32_t col_index, T&& param, std::true_type)
{
statement->setNumber(col_index, oracle::occi::Number(param));
}
template<typename T>
void bind_param_impl(uint32_t col_index, T&& param, std::false_type)
{
statement->setString(col_index, std::forward(param));
}
OracleConnection::StatementWrapper statement;
};
然後我寫了下面的客戶端代碼來測試它:
OraclePreparedStatement stmt;
auto col_index = 1;
stmt.bind_param(col_index++, 15);
stmt.bind_param(col_index++, std::string("test string"));
但它無法編譯。兩次調用bind_param方法都會導致編譯錯誤:
error: no matching function for call to 'forward(int&)'
error: no matching function for call to 'forward(std::basic_string&)'
爲什麼轉發參數無法編譯?
哦,當然,我有代碼錯誤型,我沒有認出。謝謝。 –