如何分析类模板

How to parse through a class template?

本文关键字:      更新时间:2023-10-16

我有一个存储类型名 T 的值的类模板:

template<typename T>
class Container
{
public:
    void storeT(const T& input); //Sets data = input
private:
    T data;
}

我想编写一个函数来查看数据并删除目标的出现。因此,如果我将这句话存储在T中:"西班牙的雨整齐地落在平原上",那么我要调用此函数来删除"西班牙"的出现,那么数据现在将是"雨整齐地落在平原上"。我以前通过解析字符串和字符串流来做到这一点,但是我以前没有使用类模板做过。

我的问题来自不知道如何解析此类数据。我需要找到某种方法来读取typename T变量,以便找到单词/字母/短语并将其删除。

的第一个想法是这样做类似于我解析字符串的方式:创建我正在搜索的目标的数据成员,在这种情况下,它可能会被T target并将其设置为等于我正在搜索的值。然后将目标与我正在解析的事物的各个部分进行比较,如果它相等,则做一些事情,在这个问题上将其删除。

这就是我的问题出现的地方:你能解析类模板的数据成员吗?如果是这样,它是否类似于解析字符串,或者您是否需要其他类型的支持?

编辑:在我使用它的所有情况下,T都将是一个std::string

不,这通常不起作用。您用于T的所有类型都必须提供一些可用于"解析"的通用接口。但是除std::string以外的一般类型不提供等于std::string::find()的方法。

无论如何,您打算将其用于哪些类型的T

std::search(begin(data), end(data), ...可以处理任何类似容器的东西。但是,您究竟如何从std::array<char,40>中删除某些东西?它不能变成std::array<char,35>.

相关文章:
  • 没有找到相关文章