我有這樣的模板:將參數傳遞給模板
template<class a>
a multiply(a x, a y){
return x*y;
}
我如何可以通過不同類型的參數? (int和float例如)
我有這樣的模板:將參數傳遞給模板
template<class a>
a multiply(a x, a y){
return x*y;
}
我如何可以通過不同類型的參數? (int和float例如)
這取決於你想要達到的目標。您可以顯式指定模板參數(而不是推導它),這會導致「不匹配」參數轉換爲該類型。
在這個答案所有例子int i; float f;
例如,你可以這樣做:
float res = multiply<float>(i, f); //i will be implicitly converted to float
或者這樣:
int res = multiply<int>(i, f); //f will be implicitly converted to int
甚至這樣的:
double res = multiply<double>(i, f); //both i and f will be implicitly converted to double
如果您確實想接受不同類型的參數,則需要以某種方式處理返回類型規範。這可能是最自然的做法:
template <class Lhs, class Rhs>
auto multiply(Lhs x, Rhs y) -> decltype(x * y)
{
return x * y;
}
在C++ 11之後,我們可以將簽名更改爲「自動乘法(Lhs x,Rhs y)」或「decltype(自動)乘法(Lhs x,Rhs y)」 – AndyG
使用您提供的模板,您無法傳遞不同的類型。 – DeiDei