0

我正在尝试编写一个模板类。

template <<typename T>>
myclass {
  // ...
}

我希望T这样,如果我myclass obj<T>用适当的实例化T,该类应该能够在两个数字的最小值或最大值之间进行选择。即 myclass 实例化为 min 或 max 视情况而定。

我不介意使用 std::less/std::more/std::max/std::min 或任何内置仿函数对象。

但是,我不希望在构造函数中使用枚举,然后根据枚举值调用 min 或 max 例程。我希望代码更干净一些。有任何想法吗?是否有可能在 C++ 中做到这一点

4

2 回答 2

2

这没什么大不了的。考虑以下:

template<typename T> class MyClass {
public:
    int foo(int a, int b) const {
        return T()(a, b);
    }
};

现在,如果T是一个类型,它operator()返回它的两个参数中的最大值,那么您将返回最大值,对于您希望应用的任何其他二进制算法也是如此。

于 2012-04-15T23:48:55.953 回答
1

[编辑]我相信我没有完全理解您的问题,@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;
  }
};
于 2012-04-15T23:38:39.423 回答