可变类的文件包含问题

时间:2017-03-23 05:03:50

标签: c++ variadic-templates

我有一个variadic template class,我试图将我的命名空间包含在另一个文件中,以便我可以在课程中使用它中的一些函数。

但是,包含命名空间的文件还包含与该类相关的using语句,因为我还需要该命名空间中的一些函数的可变参数类。

我在尝试这样做时遇到了很多错误,并且想知道是否有办法实现我的目标......

这就是我的意思:

#include "VariadicClass.hpp"
#include <stdint.h>
using VariadicClass3 = VariadicClass<3, int>

namespace mynamespace {
   int function1(VariadicClass3 param){return 1;}
   int function2(){return 0;}
}

////////////////////////////////////////////
#include "MyNamespace.hpp"
#include <stdint.h>
template<std::size_t T_size, typename T>
class VariadicClass3 {
    public:
        //...
        void function1(){
            auto some_var = mynamespace::function2();
        }
};

1 个答案:

答案 0 :(得分:2)

您发布的代码中有几个拼写错误。暂时忽略它,您可以使用如下所示的前向声明来删除循环依赖:

MyNamespace.hpp:

#pragma once

#include <cstdint>

// Forward declare the class.
template<std::size_t T_size, typename T> class VariadicClass;

using VariadicClass3 = VariadicClass<3, int>;

namespace mynamespace {

   // Use the class only in reference in declaration.
   // If the implementation of the function needs to 
   // access to members of VariadicClass3, it needs to be
   // in a .cpp file where VariadicClass.hpp can be #include'd.
   int function1(VariadicClass3 const& param){return 0;}

   int function2(){return 1;}
}

VariadicClass.hpp:

#pragma once

#include "MyNamespace.hpp"

template<std::size_t T_size, typename T>
class VariadicClass {
   public:
      //...
      void function1(){
         auto some_var = mynamespace::function2();
      }
};