【发布时间】:2019-03-06 11:11:47
【问题描述】:
我有一个结构类型,假设它看起来像这样:
struct Token {
int type;
char value[64];
};
我想把Token 的对象放到一个流中,像get()、peek() 这样的函数都返回一个对象(或引用/指针)?
类似这样的:
Token token = stream.get(); 或
Token* token = stream.get();
【问题讨论】:
-
这是不可能的,但你可以重载
operator>>函数来读取Token对象。 -
不确定,但也许专门为您的类型提供
std::char_traits(或编写自定义替换)是您想要的? -
@HolyBlackCat 这可能还不够,例如
get函数从底层缓冲区读取一个“字符”,这也需要专门化(甚至可能重新实现)。 -
@reavenisadesk 你能告诉我们你真正想解决什么问题吗?为什么需要从
get或peek函数中获取Token?您是否正在为解析器/编译器创建标记器?那么你最好分层进行:解析器从标记器中提取标记,标记器从流中提取字符,流从缓冲区中提取字符,缓冲区依次从文件(或字符串,在例如std::istringstream)。 -
问题是你仍然需要从你正在解析的文件中读取单个字符。创建一个实现合适接口(使用
get和peek等)并让这个类使用流来读取字符的标记器类要简单得多。