c ++模板及其元素类型

时间:2010-03-31 16:01:05

标签: c++ templates

这是我的模板矩阵类:

template<typename T>
class Matrix
{
public:
....
Matrix<T> operator / (const T &num);
}

然而,在我的Pixel类中,我根本没有定义Pixel / Pixel运算符!

为什么在这种情况下,编译器仍然编译?

像素类

#ifndef MYRGB_H
#define MYRGB_H

#include <iostream>
using namespace std;

class Pixel
{
public:
    // Constructors
    Pixel();
    Pixel(const int r, const int g, const int b);
    Pixel(const Pixel &value);
    ~Pixel();

    // Assignment operator
    const Pixel& operator = (const Pixel &value);

    // Logical operator
    bool operator == (const Pixel &value);
    bool operator != (const Pixel &value);

    // Calculation operators
    Pixel operator + (const Pixel &value);
    Pixel operator - (const Pixel &value);
    Pixel operator * (const Pixel &value);
    Pixel operator * (const int &num);
    Pixel operator / (const int &num);

    // IO-stream operators
    friend istream &operator >> (istream& input, Pixel &value);
    friend ostream &operator << (ostream& output, const Pixel &value);

private:
    int red;
    int green;
    int blue;
};

#endif

2 个答案:

答案 0 :(得分:7)

C ++模板在您使用它们时实例化,这也适用于Matrix<T>::operator/(const T&)。这意味着编译器将允许Matrix<Pixel>,除非您调用除法运算符。

答案 1 :(得分:0)

1)您没有提供Matrix运算符的主体,因此可能不需要Pixel / Pixel运算符。

2)Afaik,模板方法不会生成编译错误,除非您在代码中的某处调用它们。不知道这是否是标准的,但某些版本的MSVC就是这样做的。做

Matrix m;
Pixel p;
m = m/p

代码中的某处,看看会发生什么。