1

我创建了一个模板类,它工作正常:

(我正在使用 openCV 库,所以我有 cv::Mat 类型的矩阵)

template < class T, T V >
class MatFactory
{

  private:

    const T static VALUE = V;

  public:

    void create(/* some args */)
    {
      cv::Mat M;

      // filling the matrice with values V of type T

      // loop i,j
      M.at<T>(i,j) = V;

      return M;
    }
};

但稍后在代码中,我需要在某些索引 (i,j) 处获取矩阵 M 的元素。但是我怎么知道 T 型呢?

MatFactory<int, 1> MF;

// getting object
cv::Mat m = MF.create();

// then I need to get some value (with `.at<>` method)
int x = m.at<int>(2,3);

// But, it means I should every time explicitly declare INT type
// Can I somehow get the type, that was passed to template factory
// Than i'll write something like this:
T x = m.at<T>(2,3);

// How to get T from the deferred template?
4

2 回答 2

1

只需将type成员添加到您的MatFactory

template <typename T, T V>
class MatFactory {
public:
    typedef T type;
   ...
};

请注意,非类型模板参数相当有限。特别是,浮点类型是不允许的(想想这可能已经被 C++2011 改变了)。

于 2012-05-09T22:51:35.867 回答
1

如果您知道数组元素类型(可以使用方法 Mat::type() 检索),您可以访问二维数组的元素 M_{ij}:

M.at<double>(i,j) += 1.f;

假设 M 是一个双精度浮点数组。对于不同数量的维度,该方法有几种变体。

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat

于 2012-05-09T23:08:12.697 回答