我已经习惯使用C ++中的函数来解析由特定字符分隔的字符串/缓冲区,并将这些标记中的一个分配给通过引用传入的值,并返回其余的缓冲/串。然而,我的记忆在它的工作方式上有点错误,我在尝试重新创建它时遇到了一些困难。
我想知道是否可以通过巧妙使用模板函数来实现这一点,因为我并不完全熟悉模板函数的使用。
我的目标是
// assume buffer is a string, delimited by some character, say '^'
// in this particular scenario: 5^3.14^test^
TokenAssignment( buffer, testInt );
TokenAssignment( buffer, testFloat );
TokenAssignment( buffer, testString );
template<class Token>
void TokenAssignment(std::string& buffer, Token& tokenToBeAssigned)
{
std::string::size_type offset = buffer.find_first_of ('^');
/* Logic here assigns token to the value in the string regardless of type. */
// move the buffer on
buffer = buffer.substr(offset+1);
}
// so the three calls above would have
// testInt = 5
// testFloat = 3.14f
// testString = "test"
这样的事情可能吗?
答案 0 :(得分:0)
您似乎将第一部分放下,将字符串拆分为较小的字符串(“5”,“3.14”,“test”)。
要将这些值分配给其他类型的变量(例如“3.14”=&gt; 3.14
),stringstream
非常方便:
#include <sstream>
template<typename T>
void scanString(std::string str, T &x)
{
std::stringstream ss;
ss << str;
ss >> x;
}