C++ 标准::最小值/标准::最大值,带“;“内在相似”;
我正在重写一个库,其中一个“接口”是一个全局数字变量(不要问) 我将它替换为UDT的全局对象,它的行为类似于一个数值,支持C++ 标准::最小值/标准::最大值,带“;“内在相似”;,c++,c++11,C++,C++11,我正在重写一个库,其中一个“接口”是一个全局数字变量(不要问) 我将它替换为UDT的全局对象,它的行为类似于一个数值,支持运算符int()const 我的图书馆的一些内部消费者使用std::max作为全局变量。他们将得到编译错误,因为std::max只需要一个T 例如: PseudoInt x; // in library // in consumer void conumser() { int y = std::max(5, x); // will error now, beca
运算符int()const
我的图书馆的一些内部消费者使用std::max作为全局变量。他们将得到编译错误,因为std::max只需要一个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(5,x)
我在这里运气不好吗?因为
std::max
是一个模板,您可以使用伪Int和Int为std::max
提供专门化。为什么不编写自己的max函数,该函数接受一个PseudoInt
,然后将其交给std::max
?如果您创建一个从Int到该数据类型的隐式构造函数,并为std::max创建一个模板专门化?但是使用int作为模板参数的显式调用将不起作用。不要添加隐式构造函数!哎哟!@Langitar,不,它不会-因为std::max
是一个模板,它不会执行隐式转换。谢谢-是的,我考虑过这个。我在寻找一个更通用的解决方案,它可以处理所有的算法,而不仅仅是std::max。我应该在我的问题中更明确地说明这一点。如果我没有看到任何魔弹(我认为没有,tbh),我会将其标记为可接受的解决方案。谢谢,我的PseudoInt比最初的规范稍微复杂一点。它是一个模板。伪全局模板NUMERIC_T max(NUMERIC_T a,伪全局b){return std::max(a,static_cast(b));}。。。