c++ - 仅为专用模板类定义转换运算符

标签 c++ templates

我想为矩阵<1, 1> 定义 float 转换。我很难弄清楚如何实际定义它。如果我使它成为一个全局函数

template<typename T>
inline operator T(const matrix<T, 1, 1> &m){ return m(0, 0); }

我得到“运算符..必须是一个非静态成员函数”

我当然可以将它定义为通用矩阵模板的成员,但随后它将为所有矩阵定义 - 这不是我想要的。我希望它只针对 1x1 矩阵的特定情况进行定义。

最佳答案

你必须为此特化一个类,例如:

template <typename Base, typename T, std::size_t W, std::size_t H>
struct MatrixConversion
{ /*Empty*/ };

template <typename Base, typename T> struct MatrixConversion<T, 1u, 1u>
{
    operator const T&() const { return static_cast<const Base&>(*this).m[0][0]; }
};


template <typename T, std::size_t W, std::size_t H>
struct Matrix : MatrixConversion<Matrix<T, W, H>, T, W, H>
{
    // Your code
};

关于c++ - 仅为专用模板类定义转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062910/

相关文章:

指向成员函数的 C++ 函数指针 - 它接收哪个地址?

c++ - 如何使用 STL 拆分字符串?

c++ - 具有专门成员函数的默认模板参数

python - 使用标签 '{{value | first}}' 返回模型中的第一张图像

python - Django 身份验证 : password change template customization

c++ - 如何使用(类似?)可变参数模板在 C++14 中编写位掩码

c++ - 在 C++ 中使用正则表达式出错

c++ - 解压缩参数的类型

c++ - 顶点缓冲区对象中的颜色 - DirectX 与 OpenGL

C++ 模板和继承,派生类中的函数未被替换