我正在编写代码以与各种类型的实例进行比较。最终的比较功能非常简单-带有签名:
template <typename T>
int not_equal(const T& arg1, const T& arg2) {
if (arg1 == arg2)
return 0;
std::cerr << "Error when comparing" << std::endl;
return 1;
}
现在-我想将std::cerr
消息中要比较的实际值添加为:
std::cerr << "Error when comparing " << arg1 << " != " << arg2 << std::endl;
但是-许多类都没有operator<<
-可以。对于不支持operator<<
的类,我只需要类名-即伪代码应类似于:
if (supports_operator<<<T>)
std::cerr << "Error when comparing " << arg1 << " != " << arg2 << std::endl;
else
std::cerr << "Error when comparing instances of type: " << typeid(arg1).name() << std::endl;
我可以使用虚拟的supports_operator<<<T>()
功能吗?
编辑:我仅限于C ++ 17
如果您能够使用C ++ 20和concepts
,则可以执行以下操作: