又一个模板问题!我正在尝试获取一个模板方法,如果它有运算符 << 的重载,它将输出一个对象。我几乎所有东西都在工作,并实现了一个 enable_if 以使 g++ 为每种类型的对象选择预期的专业化。
事情是,对于一个非重载的对象,它工作得很好。但是对于重载,我的两个专业都是 g++ 的合理选择,而不是编译它会输出一个模棱两可的重载错误。
这是代码:
template<typename T>
static void Print(Stream& out, T& param, typename enable_if<CanPrint<T>::value>::type = 0)
{
out << param;
}
template<typename T>
static void Print(Stream& out, T& param)
{
out << "/!\\" << typeid(param).name() << " does not have any overload for <<.\n";
}
我明白为什么这样的事情是模棱两可的。然而我想不出一种让它更明显的方法......我如何让编译器明白只有在第一个重载不能选择时才选择第二个重载?