模板模板参数,内部参数不固定

时间:2017-05-15 20:22:22

标签: c++ templates

我有一个名为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的所有可能参数的情况下执行此操作?

2 个答案:

答案 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);
};

live example on wandbox

答案 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);
}