Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标准::最小值/标准::最大值,带“;“内在相似”;_C++_C++11 - Fatal编程技术网

C++ 标准::最小值/标准::最大值,带“;“内在相似”;

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

我正在重写一个库,其中一个“接口”是一个全局数字变量(不要问)

我将它替换为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, 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));}。。。