是否可以仅在一个类中包含代码?

时间:2018-02-02 13:19:41

标签: include c++-cli

我希望我能解释一下自己。

我有下一个:

档案“A.h”:

#include "C.h"

public class A{
    // Some code...
}

文件“B.h”:

#include "A.h"

public class B{
    A a = new A();      //With this line I mean I'm using one instance of "A" inside "B.h"
    //Some code...
}

是否可以在“A.h”中包含“C.h”?

我的问题是我所包含的代码给了我很多与常规功能的冲突。这不是逐个纠正冲突的选择,因为它们有很多。此外,我的“C.h”代码只是一个测试代码:经过一些测试,我将删除包含行。

有没有办法'冒泡'我的包括?

提前谢谢。

编辑:A.h和B.h在同一名称空间。

1 个答案:

答案 0 :(得分:1)

  

是否可以包括" C.h"只在里面" A.h"?

否。据我所知。

如果您有名称冲突,只需在另一个名称空间中包含C.h,如@ user202729所提议的那样。这可以提供帮助。

但我猜你在A中使用C进行测试,如果没有与C ++ Cli不兼容的实现或来自B.h的内容,你不能在A中使用它。

我们使用了pimpl ideom(指向实现的指针)。 例: c ++ / clr目前不允许直接包含,这就是为什么有时你不能使用你想要使用的库(如C.h),因为它们确实依赖于它的支持。

这是我的C.h(由所有其他标题使用)

            struct LockImpl; // forward declaration of C.

            class C
            {
            public:
                C();
                virtual ~C();

            public:
                void Lock() const;
                void Unlock() const;
                LockImpl* _Lock;
            };

这是我的C.cpp(没有/ clr编译)

            #include <mutex>

            struct LockImpl
            {
                std::mutex mutex;
            };

            C::C() : _Lock(new LockImpl()) {}
            C::~C() { delete _Lock; }

            void C::Lock() const
            {
                _Lock->mutex.lock();
            }

            void C::Unlock() const
            {
                _Lock->mutex.unlock();
            }

A.H

#include "C.h"

public class A{
   C c;
   void someMethod()
   {
      c.Lock() // I used another template for a RAII pattern class.
      c.Unlock() 
   }
}