如果函数模板声明中包含默认参数,如
// Function template for matrix initialization
template<typename T>
MATRIX<T> create_matrix(std::size_t rows, std::size_t columns,
std::optional<MatrixType> type = MatrixType::Zeros,
std::optional<T> lowerBound = std::nullopt,
std::optional<T> upperBound = std::nullopt);
1.如果函数的定义不是inline,那么函数定义时的不能加上默认实参的等号,即
template<typename T>
MATRIX<T> create_matrix(std::size_t rows, std::size_t columns,
std::optional<MatrixType> type,
std::optional<T> lowerBound,
std::optional<T> upperBound) {
// 函数定义
}
2.如果在声明时就定义了,那没事了
函数模板的声明和定义必须在同一个文件内,否则会出现链接错误,即undefined reference.具体参考https://blog.csdn.net/imred/article/details/80261632