检查T是否具有运算符<

问题描述 投票:1回答:1

我正在编写代码以与各种类型的实例进行比较。最终的比较功能非常简单-带有签名:

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++
1个回答
0
投票

如果您能够使用C ++ 20和concepts,则可以执行以下操作:


推荐问答