【发布时间】:2013-02-16 22:23:55
【问题描述】:
要将对象写入命令行(或其他输出流),可以重载<< 运算符。但是有没有可能为模板实现这一点?
假设我有以下内容:
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) 应该执行一致性检查并向std::cout 写入警告,以防data_map_ 中不存在请求的元素。
简单地将 id 传递给 cout 是行不通的,因为用于特化的类型可能没有重载的 << 运算符。
还有其他可能实现这一目标吗?也许标识符必须实现一个纯虚拟类,该类强制所有标识符重载<< 运算符。但这可能吗?
感谢您的帮助。
问候
【问题讨论】:
-
您可以简单地执行
cout << id,因为在所有没有适当重载的情况下都会出现编译器错误。
标签: c++ templates generics operator-overloading