我目前正面临一个嵌套模板参数的问题,我想访问它,但我不确定这是否可行。以下是对问题的描述:
我有一个库中的“直方图”,我没有影响。该课程如下:
template<int N>
struct Histogram
{
float histogram[N];
static int descriptorSize() { return N; }
};
现在我想创建自己的主成分分析类,它应该能够处理任意大小的直方图:
template<template<typename> class HistogramT>
class PCA {
// I'd like to pass on the nested template parameter here
typedef typename Matrix< float , N , N > MatrixNf;
// ...
}
该类的最终实例化如下:
PCA<Histogram<153> > pca;
我现在的问题是,如何或者甚至可以访问我的PCA课程中Histogram<int N>
的模板参数N?
答案 0 :(得分:4)
如果你想这样做:
PCA<Histogram<153> > pca;
然后PCA
应为:
template <typename Histogram>
class PCA { ... };
因为Histogram<153>
是完整类型,而不是模板。至于如何获得这个数字?只需写一个类型特征:
template <typename T> struct get_histogram_size;
template <int N>
struct get_histogram_size<Histogram<N> > {
static const int value = N;
}
用法:
template <typename Histogram>
class PCA {
static const int N = get_histogram_size<Histogram>::value;
typedef typename Matrix< float , N , N > MatrixNf;
// ...
};
答案 1 :(得分:3)
template <class T>
class PCA;
template <int N>
class PCA<Histogram<N> >
{
typedef typename Matrix< float , N , N > MatrixNf;
// ...
};
PCA<Histogram<153> > pca;
答案 2 :(得分:1)
首先,您的模板模板参数不正确。它应该有int
而不是typename
template<template<int> class HistogramT>
class PCA
但现在你不能写
PCA<Histogram<154>>
因为Histogram<154>
不是模板,所以它是一个类。我建议您只需添加另一个参数,如下所示:
template<template<int> class HistogramT, int N>
class PCA
并使用
PCA<Histogram, 154>
直方图模板编写得不是很好。如果是,它将提供类似的东西:
static const int size = N;
在里面,所以你可以这样做:
template<class HistT>
class PCA
{
//here, use HistT::size for N.
}