在模板类定义下定义内联函数
我试图在类定义下创建一个模板类ctor的内联定义(我知道你可以在里面做,但我更喜欢在头文件的外面做)。 然而,MSVC告诉我, Matrix
需要ctor定义中的模板参数列表...我可以通过在类中定义函数(它仍然会被内联)轻松解决这个问题,但是我宁愿在外面去做,因为美学原因。 有没有办法解决这个问题?
// .hpp
#pragma once
template <typename T, size_t rows, size_t cols>
class Matrix {
private:
constexpr size_t m_size = rows * cols;
std::array<T, m_size> m_arr;
public:
__forceinline Matrix();
};
Matrix::Matrix() : m_arr() { // this gives errors
// do ctor stuff
}
但是,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
),并且#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
template <typename T, std::size_t rows, std::size_t cols>
Matrix<T,rows,cols>::Matrix() : m_arr() {
// do ctor stuff
}
链接地址: http://www.djcxy.com/p/37141.html
上一篇: defining inline functions under template class definition
下一篇: C++