我正在尝试编写一个模板化类。
template <<typename T>>
myclass {
// ...
}
我希望T
是这样的,如果我用适当的T
实例化myclass obj<T>
,该类应该能够在两个数字的最小值或最大值之间进行选择。即 myclass 根据情况使用 min 或 max 进行实例化。
:max/std::min 或任何内置的函子对象。
但是,我不希望在构造函数中使用枚举,然后根据枚举值调用最小或最大例程。我希望代码更干净一点。有什么想法吗?是否有可能在C++做到这一点
没什么大不了的。请考虑以下事项:
template<typename T> class MyClass {
public:
int foo(int a, int b) const {
return T()(a, b);
}
};
现在,如果T
是一个类型,其operator()
返回两个参数中的最大值,那么您将返回最大值,并且与您希望应用的任何其他二进制算法相同。
[编辑] 我相信我没有完全理解你的问题的重点,@DeadMG的答案实际上是你要找的。
下面的模板允许您实例化一个类,给定 T、MIN、MAX 可以在 T 之间的 MIN 和 MAX 之间提供一些数字 X。
template<int T, int MIN, int MAX, int X = MIN + T/(MAX - MIN)>
class MyClass
{
int foo() const
{
return X;
}
};