2016-05-13 59 views
2

我正在重写一个库,其中一个“接口”是一个全局数值变量(不问)。std :: min/std :: max与“内在样”

我与就像一个数字UDT的一个全局对象替换它,支持operator int() const

一些内部消费者我的图书馆使用std ::的最大与全球。他们将得到的编译错误,因为的std ::最大只要求单一T.

例如:

PseudoInt x; // in library 

// in consumer 
void conumser() 
{ 
    int y = std::max(5, x); // will error now, because int and PseudoInt are not the same T 
} 

我想最佳喜欢我的消费者没有通过做这样的事情std::max<int>(5, x)反应。

我在这里运气不好吗?

+3

为什么不写你自己的最大函数,需要一个'PseudoInt'然后把它交给'std :: max'? – NathanOliver

+0

也许如果你创建一个隐式构造函数从int到该数据类型和std :: max的模板专门化?但是用int作为模板参数的显式调用将不起作用。 – languitar

+0

不要添加隐式构造函数! EW! –

回答

3

由于std::max是一个模板,您可以为您的PseudoInt和Int提供std::max的专业化。

+0

谢谢 - 是的,我想过这个。我正在寻找一种更通用的解决方案来处理所有算法,而不仅仅是std :: max。我应该在我的问题中提出更明确的意见。如果我没有看到任何魔力子弹(我认为没有一个,tbh),我会将其标记为公认的解决方案。 – kkost

+0

我有这个工作,谢谢 - 我的PseudoInt比原来的spec'ed更复杂一点。这是一个模板。 PseudoGlobal \t模板 \t NUMERIC_T MAX(NUMERIC_T一个,PseudoGlobal B) \t { \t \t返回的std ::最大值(A,的static_cast (B)); \t} ... – kkost