我有一个名为MATRIX的模板类,它接受一个参数T.我想编写一个接受MATRIX并返回T值输出的函数。 MATRIX typedefs T在其实现中为elem_type。我最初的尝试是:
template<template<typename> class MATRIX>
class MyClass
{
...
MATRIX<>::elem_type myfun(const MATRIX<>& m1);
}
这导致模板模板参数的错误&#34;参数列表&#34; MATRIX&#34;缺少&#34;,看起来很有意义。问题是我不知道该放什么。例如,我可以指定float,但是无论MATRIX的参数是float,double,uint_16还是其他什么,我都希望这个函数能够工作。是否可以在没有特别枚举MATRIX的所有可能参数的情况下执行此操作?
答案 0 :(得分:1)
解决此问题的最简单方法是让MyClass
获取单个模板参数,然后在MATRIX
上明确地对其进行专门化。
template <typename>
class MyClass;
template <template <typename> class MATRIX, typename T>
class MyClass<MATRIX<T>>
{
// ...
typename MATRIX<T>::elem_type myfun(const MATRIX<T>& m1);
};
答案 1 :(得分:1)
如果您有模板模板参数,则需要提供另一个模板参数,该参数可用于实例化模板模板参数。
template<template<typename> class MATRIX, typename ElemenType>
class MyClass
{
}
然后,您可以使用:
template<template<typename> class MATRIX, typename ElemenType>
class MyClass
{
typename MATRIX<ElementType>::elem_type myfun(const MATRIX<>& m1);
}