当我使用这样的模板时,是否可以将多个不同数据类型的参数传递给同一个函数?
template <typename T> T func(T a, T str)
{
T strx = str + 'x';
return strx;
}
int main()
{
int a = 10;
int x;
string str = "hai";
str = func(a, str);
cout << x;
return 0;
}
答案 0 :(得分:2)
不使用单个模板参数。例如,您将int
和string
作为参数传递给func
。在这种情况下,T
会是什么类型?您需要使用2个单独的模板类型来定义每个模板类型,例如:
template <typename T1, typename T2>
T2 func(T1 a, T2 str)
现在看来,您真正想要做的就是将值附加到string
。您可以使用istringstream
来完成此操作,但您只需要一个模板参数:
template<typename T>
string func(T a, string& str) {
return static_cast<ostringstream&>(ostringstream(str, ios_base::ate) << a).str();
}
或者,如果你知道你要追加的类型总是数字类型,你可以使用:to_string
来完成同样的事情。
如果您想添加两个不相关的类型,您可以这样做:
template <typename T1, typename T2>
T2 func(T1 a, T2 str) {
stringstream sstream;
sstream << a;
T2 t2a;
sstream >> t2a;
return str + t2a;
}
这个obviously work用于func(string{"42"}, 13)
等值,但我无法使用func(string{"a"}, 13)
之类的内容stringstream
导致"a"
无法知道如何转换int
1}}到#import<SDWebImage/UIImageView+WebCache.h>
。所以请谨慎使用。
答案 1 :(得分:0)
是的,您可以通过为其所需类型之一添加模板参数,如下所示:
template <typename T1, typename T2> T2 func(T1 a,T2 str) {
// ...
}