模板类的标准流输出
Standard stream output for template classes
要将对象写入命令行(或其他输出流),可以重载<<
操作符。但是是否有可能为模板实现这一点?假设我有以下内容:
template <typename identifier>
class SomeTemplate {
public:
SomeTemplate();
~SomeTemplate();
void addElement(identifier id, unsigned int elem);
unsigend int getElement(identifier id);
private:
std::map<identifier, unsigned int> data_map_;
};
当我现在专门化类时,例如std::tuple<unsigned int, unsigned int, unsigned int>
类型的标识符,函数getElement(identifier id)
应该执行一致性检查,并在data_map_
中不存在请求元素的情况下向std::cout
写警告。简单地将id传递给cout是不行的,因为可能没有用于专门化的类型重载的<<
操作符。有没有其他的方法来实现这个目标?也许标识符必须实现一个纯虚类,强制所有标识符重载<<
操作符。但这可能吗?
谢谢你的帮助。
对
通常要做的事情是简单地声明具有流输出操作符是identifier
类型的先决条件。这无疑更符合使用模板的泛型c++编程的精神,而不是一个带有纯虚方法打印的基类。
如果你必须,也许你可以使用SFINAE打印一个简单的"unavailable"消息,如果没有特定类型的流输出操作符
您的第一个问题"是否有可能为模板[重载操作符<<]"?当然…
template <typename identifier>
std::ostream& operator<<(std::ostream& out, SomeTemplate<identifier> const& rhs);
为该声明定义一个定义就可以了。
然而,你真正要问的是,我可以流std::tuple
吗?答案似乎是否定的。当然,您可以为它编写一个本地operator<<
,但不要太广泛地公开它。
相关文章:
- 如何从Windows应用程序输出到标准?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用提升过程获取 shell 命令的标准输出
- 将标准输出重定向到ostream
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 十进制到八进制递归C++.以标准::字符串格式输出
- 在程序执行期间从标准输出重定向到自定义流
- 标准输出C++意外行为
- 防止 qDebug() 写入标准输出
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 标准输入输出操作如何C++完成
- 有没有办法知道C++中将打印到标准输出的大小?
- 最后推迟标准输出
- 得到~对标准输出没有回应~在黑客排名问题上
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- 在标准输出中执行打印会导致数组中随机分配值
- 捕获远程进程子进程的标准输出
- 如何使用BOOST_LOG_TRIVIAL宏将任何内容记录到标准输出/标准和文件
- 在c# GUI项目上重定向标准输出+标准错误
- 如何从分离的QProcess中读取标准输出/标准错误