在模板类定义下定义内联函数
defining inline functions under template class definition
我正在尝试在类定义下对模板类 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 告诉我,矩阵需要在 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
}
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 通过函数指针定义类范围之外的方法
- 关于 C++ 中的函数类型定义
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 在类构造函数中定义结构变量的参数
- 2个模板化类的非模板友元函数未定义引用错误
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- 何时需要实例化函数模板定义?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 如何声明具有在声明下定义的类型的参数的函数?
- 在 C++ 中,我可以在不修改类的情况下定义对类的隐式转换吗?
- 如何将result_of与函数类型定义一起使用
- 在模板类定义下定义内联函数
- 为什么给纯虚拟函数下定义是有意义的
- c++在不知道对象类型的情况下定义成员函数指针
- c++如何在不知道确切参数的情况下定义函数