【问题标题】:Template template parameter, interior parameter not fixed模板模板参数,内部参数不固定
【发布时间】:2017-05-15 20:22:22
【问题描述】:

我有一个名为 MATRIX 的模板类,它采用单个参数 T。我想编写一个采用 MATRIX 并返回 T 值输出的函数。 MATRIX 在其实现中将 T 类型定义为 elem_type。我最初的尝试是:

template<template<typename> class MATRIX>
class MyClass
{
...
    MATRIX<>::elem_type myfun(const MATRIX<>& m1);
}

这会导致错误“模板模板参数“MATRIX”的参数列表丢失”,这很有意义。问题是我不知道该放什么。例如,我可以指定浮点数,但无论 MATRIX 的参数是浮点数、双精度数、uint_16 还是其他任何参数,我都希望该函数能够正常工作。是否可以在不专门列举 MATRIX 的所有可能参数的情况下做到这一点?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。

标签: c++ templates


【解决方案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

【讨论】:

  • 感谢您的澄清。魔杖盒示例特别有用。
【解决方案2】:

当您有模板模板参数时,需要提供另一个模板参数,该参数可用于实例化模板模板参数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多