功能模板

时间:2010-08-03 06:02:19

标签: c++

我有一个功能模板。

template<class T> T getFromString(const string& inStream)
{
    istringstream stream (inStream);
    T t;

    stream >> t;
    return t;
}

我没有得到如何使用此功能模板。我尝试过使用函数模板的常用方法,它给出了一个错误。请让我知道如何摆脱这个。

3 个答案:

答案 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的变量时,编译器现在能够从参数中推断出类型。 (xint,因此您正在呼叫getFromString<int>)。缺点是您需要提前创建变量,并且对于简单的用例,用户代码将更加复杂,因为int n = getFromString<int>( "123" );