我正在尝试在类定义下对模板类ctor进行内联定义(我知道你可以在里面做,但我更喜欢在头文件外面做)。但是,MSVC告诉我/messages
需要ctor定义中的模板参数列表...我可以通过在类中定义函数(它仍然会内联)来轻松解决这个问题,但我更愿意这样做由于美学原因,它在外面。有办法解决这个问题吗?
Matrix
答案 0 :(得分:2)
但是,MSVC告诉我,Matrix需要ctor定义中的模板参数列表...
Matrix::Matrix() : m_arr() { // this gives errors
您错过了应该为定义提供的模板规范,这可能是编译器消息告诉您的内容:
template <typename T, size_t rows, size_t cols> // <<<< This!
Matrix<T,rows,cols>::Matrix() : m_arr() {
// ^^^^^^^^^^^^^ ... and this
// do ctor stuff
}
...但我更喜欢在头文件外面做...
为此,请将定义放入一个文件中,该文件不会被构建系统自动选为翻译单元(例如某些扩展名,如.icc
或.tcc
)和{{ 1}}包含模板类声明的标题末尾的那个。
完整的代码应该是
<强> #include
强>
Matrix.hpp
<强> #pragma once
#include <cstddef>
template <typename T, std::size_t rows, std::size_t cols>
class Matrix {
private:
constexpr static std::size_t m_size = rows * cols;
std::array<T, m_size> m_arr;
public:
__forceinline Matrix();
};
#include "Matrix.icc"
强>
Matrix.icc