我有一个功能模板。
template<class T> T getFromString(const string& inStream)
{
istringstream stream (inStream);
T t;
stream >> t;
return t;
}
我没有得到如何使用此功能模板。我尝试过使用函数模板的常用方法,它给出了一个错误。请让我知道如何摆脱这个。
答案 0 :(得分:4)
你可以像这样使用它:
std::string a = "11";
int n = getFromString<int>(a);
这将从字符串中提取整数值。
顺便说一下,最好在模板中使用T t = T();
,因为即使extaction失败,它也会保证基本数据类型的初始化。
答案 1 :(得分:1)
释放Boost的力量:
int n = boost::lexical_cast<int>("11");
答案 2 :(得分:0)
问题是编译器无法使用返回类型来推断函数的类型。作为函数调用的一部分,您需要显式提供所需的类型,如@Naveen已经提到的:getFromString<int>("123")
。另一种方法是更改函数签名,以便代替返回它接收类型作为参数:
template <typename T>
void getFromString( const std::string & str, T & value ) { ... }
int main() {
int x;
getFromString("123",x);
}
当您在调用中提供类型T
的变量时,编译器现在能够从参数中推断出类型。 (x
是int
,因此您正在呼叫getFromString<int>
)。缺点是您需要提前创建变量,并且对于简单的用例,用户代码将更加复杂,因为int n = getFromString<int>( "123" );