我需要將表示向量01s的字符串轉換爲相應的向量。將默認值作爲忽略它們的參數傳遞
我的問題是,我想通過一個簡單的參數:轉換器功能。這裏的split
:
template <class T>
auto split(const std::string &s, const std::function<T(const std::string&)> &convert, char sep = ',') -> std::vector<T>
{
std::stringstream ss(s);
std::vector<T> result;
while (ss.good())
{
std::string substr;
std::getline(ss, substr, sep);
if (!substr.empty())
result.push_back(convert(substr));
}
return result;
};
它無法通過標準功能時,如因std::stoi
的std::stoi
默認參數爲它的簽名是int stoi(const string& __str, size_t* __idx = 0, int __base = 10);
編譯:
auto q = split<int>(subs, std::stoi);
error: no matching function for call to 'split'
auto q = split<int>(subs, std::stoi);
^~~~~~~~~~
很顯然我可以欺騙編譯器使用lambda函數:
auto q = split<std::size_t>(subs, [](const std::string &s){ return std::stoul(s); });
是否有一個元編程技巧,允許我索姆ehow 忽略的默認參數?
默認參數是什麼意思?你明確指定你想要'分割'。 –
nwp
我的意思是'std :: stoi'實際上有默認參數:簽名是'int stoi(常量字符串&__str,size_t * __idx = 0,int __base = 10);'。我希望忽略該默認簽名。 – senseiwa
如果你可以避免使用std :: function,它會讓你的生活更輕鬆。 (模板化的函數參數會更好。) – alfC