当c ++模板定义附带=时,它意味着什么

时间:2014-12-01 08:42:09

标签: c++ templates boost

我试图在某个时候教我自己的泛型类和函​​数声明和Boost库。 我已经遇到了一个例子,并没有真正理解typename f=...的含义。 你可以帮助我理解在=这样的情况下使用template <typename T, typename F=ublas::row_major>符号使用模板声明的概念吗?这是我试图理解的完整程序。

#include <algorithm>
#include <vector>
#include <boost/numeric/ublas/storage.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

namespace ublas = boost::numeric::ublas;

template <typename T, typename F=ublas::row_major>
ublas::matrix<T, F> makeMatrix(std::size_t m, std::size_t n, const std::vector<T> & v)
{
    if(m*n!=v.size()) {
        ; // Handle this case
    }
    ublas::unbounded_array<T> storage(m*n);
    std::copy(v.begin(), v.end(), storage.begin());
    return ublas::matrix<T>(m, n, storage);
}

3 个答案:

答案 0 :(得分:3)

您传递给Template的是默认参数。 例如

 Template<typename T, int N = 17>
  class Generic
  {



   }

这里,第二个Argument是默认值

在你的情况下 F = ublas :: row_major 是默认值。

深入理解http://en.cppreference.com/w/cpp/language/template_parameters

答案 1 :(得分:2)

这是一个默认参数,在没有指定任何其他内容时使用。

答案 2 :(得分:2)

它是该template-d函数的entry参数的默认值/类型。这就像编译器在您编写ublas::row_major的任何地方写下F,当您在没有第二个模板参数的情况下调用makeMatrix时。

makeMatrix<int, int>( ...      // Second parameter is `int`

makeMatrix<int> ( ...   // Second is specified by default to `ublas::row_major`

To read more..