【发布时间】:2014-08-09 17:16:06
【问题描述】:
我目前正在使用 C++ 实现一个科学工具包。当我实现 Matrix 类时,我遇到了转换构造函数的问题:
template<size_t ROWS, size_t COLS = ROWS>
class Matrix {
public:
...
/** \brief Creates a matrix from a vector */
Matrix<ROWS, 1> (const Vector<ROWS>& vector) {
for (size_t i = 0; i < ROWS; i++) {
(*this)[i][0] = vector[i];
}
...
}
这段代码使用 clang++ 编译得很好,但使用 g++ 编译失败
matrix.h:43:18: error: invalid declarator before ‘(’ token
Matrix<ROWS, 1> (const Vector<ROWS>& vector) {
是否有任何其他方法可以强制特定构造函数使用某些模板参数?我这样做的方式是否不符合标准,还是应该向 gcc 报告错误?
【问题讨论】:
-
不知道为什么 clang 会接受这个,因为
Maxtrix<ROWS, 1>可能是一个与主模板实例化的模板参数完全不同的类。您可以创建一个部分专用的类并根据需要实现构造函数。
标签: c++ templates constructor type-conversion linear-algebra