我正在学习C ++,这可能是一个愚蠢的问题。
我想为常见类型定义创建一个类,并通过包含它在许多cpp文件中使用它。 标题是" CommonTypesCls.h":
class CommonTypesCls
{
public:
typedef unsigned int UINT32;
typedef int INT32;
}
我想在source.cpp中使用这些属性:
#include "CommonTypesCls.h"
int main()
{
int a = sizeof(UINT32);
return 0;
}
是否可以使用包含的类'没有范围解析的成员类型?
答案 0 :(得分:3)
不,除非您使用类型别名,否则无法实现。
using UINT32 = CommonTypesCls::UINT32;
但是你不应该这样做,因为一个类不适合收集类型定义。
将它们放在全局范围或命名空间中。
答案 1 :(得分:2)
Loooon之前,C ++标准包含 namespace
,正是出于这个目的(顺便说一下,你似乎正在重新发明一个轮子):
#include <cstdint>
namespace CommonTypesCls {
using uint32 = std::uint32_t;
using int32 = std::int32_t;
}
int foo() {
using namespace CommonTypesCls;
uint32 a = 666;
}
如果您的类型特定于某个特定类,例如依赖于模板参数(例如std::vector<>::value_type
),则必须在某处使用范围解析运算符,但您可以创建一个别名:
template<typename Container>
void bar(Container const&container)
{
using value_type = typename Container::value_type; // scope resolution
value_type temporary_storage[4];
for(auto const&x : container) {
/* do something with x and using temporary_storage */
}
}
但是,在使用auto
变量声明时,通常不需要明确指定类型。
答案 2 :(得分:1)
类通常是提供通用定义的错误方法:使用namespace
。
此外,<stdint.h>
提供了您认为需要的固定大小整数类型的特定定义。
也就是说,您可以使用public
中的protected
和C
个定义,这些定义来自C
派生类中的代码中不合格的类enum
。但这将使用两个通常错误的工具:提供定义的类和获得访问权的继承。在某些情况下,它仍然适用,例如用于提供对imread("C:/Users/Requinala/AndroidStudioProjects/CLARTIPS/app/src/main/res/drawable/bluevelvet.png")
类型中的名称的访问权限。
答案 3 :(得分:0)
不确定
#include "CommonTypesCls.h"
int main()
{
typedef typename CommonTypesCls::UINT32 UINT32;
int a = sizeof(UINT32);
return 0;
}
说真的,不是真的。