我试图在某个时候教我自己的泛型类和函数声明和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);
}
答案 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`