我已经创建了一个模板化的类,它工作正常:
(我正在使用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?
答案 0 :(得分:1)
只需将type
成员添加到MatFactory
:
template <typename T, T V>
class MatFactory {
public:
typedef T type;
...
};
请注意,非类型模板参数相当有限。特别是,不允许使用浮点类型(考虑到它可能已经使用C ++ 2011进行了更改)。
答案 1 :(得分:1)
如果您知道数组元素类型(可以使用Mat :: type()方法检索),则可以访问二维数组的元素M_ {ij}:
M.at<double>(i,j) += 1.f;
假设M是双精度浮点数组。对于不同数量的维度,该方法有几种变体。
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat