在模板类定义下定义内联函数

时间:2017-12-29 18:22:55

标签: c++ templates

我正在尝试在类定义下对模板类ctor进行内联定义(我知道你可以在里面做,但我更喜欢在头文件外面做)。但是,MSVC告诉我/messages需要ctor定义中的模板参数列表...我可以通过在类中定义函数(它仍然会内联)来轻松解决这个问题,但我更愿意这样做由于美学原因,它在外面。有办法解决这个问题吗?

Matrix

1 个答案:

答案 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