如何将类定义分成2个头文件?

时间:2014-09-23 17:22:03

标签: c++ class

我需要拆分一个类(.h文件)

#ifndef _L_H
#define _L_H
template<class L> class Myclass{
public:
  L();
  firstoperator(..);
  secondoperator(..);
private:
 ...
}
template <class L> Myclass<L>::L() ...
template <class L> Myclass<L>::firstoperator(..) ...
template <class L> Myclass<L>::secondoperator(..) ...

以两种不同的.h文件格式如下:

#ifndef _L_H
#define _L_H
template<class L> class Myclass{
public:
  L();
  firstoperator(..);
private:
 ...
}
template <class L> Myclass<L>::L() ...
template <class L> Myclass<L>::firstoperator(..) ...

#ifndef _L_H
#define _L_H
template<class L> class Myclass{
public:
  secondoperator(..);
}

template <class L> Myclass<L>::secondoperator(..) ...

如何在没有冲突的情况下正确地做到这一点?

提前谢谢。

3 个答案:

答案 0 :(得分:9)

你可以在技术上做到这一点,但它很难看。 不要这样做

Class1.hpp:

class MyClass
{
    int something;
    int somethingElse;

Class2.hpp:

    int somethingBig;
    int somethingSmall;
};

我希望很清楚这有多恶心:)

答案 1 :(得分:4)

  

“如果没有冲突,我怎么能正确地做到这一点?”

你做不到。在c ++中,不可能在几个头文件上传播类声明(与c#不同)。所有类成员的声明必须出现在类声明体中,在每个使用该类的翻译单元中看到的单个点。

您可以将模板特化或实现分开来分隔标题。

答案 2 :(得分:1)

您可以使用遗产将类拆分为两个标题。

您可以在基础上声明半类,而在派生的基础上声明另一半。

像这样:

class C12{
public:
  void f1();
  void f2();
};

可以拆分为C1和C12

class C1{
public:
  void f1();
};

class C12: public C1{
public:
  void f2();
};

现在C12与之前相同,但分为2个文件。