我有以下模板函數:C++模板變換字符串編號
template <typename N>
inline N findInText(std::string line, std::string keyword)
{
keyword += " ";
int a_pos = line.find(keyword);
if (a_pos != std::string::npos)
{
std::string actual = line.substr(a_pos,line.length());
N x;
std::istringstream (actual) >> x;
return x;
}
else return -1; // Note numbers read from line must be always < 1 and > 0
}
好像行:
std::istringstream (actual) >> x;
不工作。 但是同樣的功能沒有模板:
int a_pos = line.find("alpha ");
if (a_pos != std::string::npos)
{
std::string actual = line.substr(a_pos,line.length());
int x;
std::istringstream (actual) >> x;
int alpha = x;
}
作品就好了。 它是一個問題與std :: istringstream和模板?
我正在尋找一種方法來讀取配置文件和加載參數,它們可以是int或real。
編輯解決方案:
template <typename N>
inline N findInText(std::string line, std::string keyword)
{
keyword += " ";
int a_pos = line.find(keyword);
int len = keyword.length();
if (a_pos != std::string::npos)
{
std::string actual = line.substr(len,line.length());
N x;
std::istringstream (actual) >> x ;
return x;
}
else return -1;
}
你是怎麼調用這個函數的?什麼是'N'?你有編譯錯誤嗎? – interjay
沒有編譯錯誤。我將這個函數稱爲:alpha = var :: findInText(line,「alpha」); –