C++ 变量类的文件包含问题
我有一个C++ 变量类的文件包含问题,c++,variadic-templates,C++,Variadic Templates,我有一个可变模板类,我试图在另一个文件中包含我的名称空间,以便在类中使用其中的一些函数 但是,包含名称空间的文件还包含一个与该类相关的using语句,因为我还需要该名称空间中的一些函数的变量类 我在尝试这样做时犯了很多错误,我想知道是否有办法实现我的目标 我的意思是: #include "VariadicClass.hpp" #include <stdint.h> using VariadicClass3 = VariadicClass<3, int> namespac
可变模板类
,我试图在另一个文件中包含我的名称空间,以便在类中使用其中的一些函数
但是,包含名称空间的文件还包含一个与该类相关的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();
}
};
#包括“VariadicClass.hpp”
#包括
使用VariadicClass3=VariadicClass
名称空间mynamespace{
int function1(VariadicClass3参数){return 1;}
int function2(){return 0;}
}
////////////////////////////////////////////
#包括“MyNamespace.hpp”
#包括
模板
类别3{
公众:
//...
无效函数1(){
auto some_var=mynamespace::function2();
}
};
您发布的代码中有几处输入错误。暂时忽略这一点,您可以使用如下所示的转发声明来删除循环依赖项:
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;}
}
#pragma一次
#包括
//向前声明类。
模板类和模板类;
使用VariadicClass3=VariadicClass;
名称空间mynamespace{
//仅在声明中的引用中使用该类。
//如果功能的实现需要
//访问VariadicClass3的成员,需要
//在.cpp文件中,VariadicClass.hpp可以是#include'd。
int function1(VariadicClass3常量和参数){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();
}
};
#pragma一次
#包括“MyNamespace.hpp”
模板
类变量类{
公众:
//...
无效函数1(){
auto some_var=mynamespace::function2();
}
};
您发布的代码中有几处输入错误。暂时忽略这一点,您可以使用如下所示的转发声明来删除循环依赖项:
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;}
}
#pragma一次
#包括
//向前声明类。
模板类和模板类;
使用VariadicClass3=VariadicClass;
名称空间mynamespace{
//仅在声明中的引用中使用该类。
//如果功能的实现需要
//访问VariadicClass3的成员,需要
//在.cpp文件中,VariadicClass.hpp可以是#include'd。
int function1(VariadicClass3常量和参数){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();
}
};
#pragma一次
#包括“MyNamespace.hpp”
模板
类变量类{
公众:
//...
无效函数1(){
auto some_var=mynamespace::function2();
}
};