我想在某个时候自学通用类和函数声明以及Boost库。
我遇到了一个示例,但我不太了解typename f=...
的含义。
在以下情况下,您能否帮助我理解在=
符号中使用模板声明的概念?这是我想了解的完整程序。
#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);
}
最佳答案
这是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..