我有:
class C
{
C(long){...};
C(double){...};
:
}
很遗憾,
C c{5}; // error! ambiguous overload
(这很可怕,不是吗?整数类型肯定有利于构造函数采用更高精度的整数参数。)
如何正确地将整数参数和浮点参数正确转发给各自的构造函数?
编辑:也许我过分简化了这个问题。它最初来自这个询问。我正在包装 Python 原语,例如 Float Long String,重要的是初始化被转发到正确的原语。同时,由于这是一个通用的包装器,我不希望消费者为了避免内部陷阱而担心类型转换。
正如 Mike Seymour 所指出的,SFINAE 提供了一种处理此问题的技术。
非常感谢 FreeNode C++ 频道上的 doug64k 提供以下解决方案:
http://ideone.com/QLUpu2 http://ideone.com/TCigR3 http://ideone.com/oDOSLH
明天当我找到线索时,我将尝试将这些作为答案。