为多种类型标记字符串

时间:2013-09-17 17:40:54

标签: c++ templates types tokenize

我已经习惯使用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"

这样的事情可能吗?

1 个答案:

答案 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;
}