gpt4 book ai didi

c++ - 转发 typedef 声明、对构建时间的影响和命名约定

转载 作者:行者123 更新时间:2023-11-30 04:40:24 25 4
gpt4 key购买 nike

我很好奇我的 typedef 方法对我的构建有何影响。

请考虑以下示例。

#include "SomeClass.h"

class Foo
{
typedef SomeClass SomeOtherName;

SomeOtherName* storedPointer;

void setStoredPointer(SomeOtherName* s);
}

void Foo::setStoredPointer(SomeOtherName* s)
{
storedPointer = s;
}

每当我遇到上述情况时,这会将 typedef 驱动到头文件中,因此需要我将它#include 到头文件中。我担心缺少前向声明可能会导致构建时间更长。

基于这篇文章的评论:

Forward declaration of a typedef in C++

我可以转发声明类,typedef 一个引用或指针,然后在 .cpp 文件中#include。这应该允许更快的构建时间。我对此的结论是否正确?

如果是这样,我最终会得到这样的 typedef:

typedef SomeClass* SomeOtherNamePtr;
typedef SomeClass& SomeOtherNameRef;
typedef const SomeClass* SomeOtherNameConstPtr;
typedef const SomeClass& SomeOtherNameConstRef;

这对我来说看起来不像是非常干净的代码,我想我已经阅读了反对此建议的文章/帖子(不一定是关于 SO 的)。

你觉得这可以接受吗?更好的选择?


更新:使用 Michael Burr 的回答,我只能解决指针和引用的问题。但是,当我尝试在我的函数中使用 sizeof() 时遇到了问题。例如,假设该类具有以下功能:

//Foo.h
class Foo
{
typedef class SomeClass SomeOtherName;

void doSomething(const SomeOtherName& subject)
}

//Foo.cpp
#include "Foo.h"
#include "SomeClass.h"
void Foo::doSomething(const SomeOtherName& subject)
{
sizeof(subject); //generates error C2027: use of undefined type 'SomeClass';
sizeof(SomeClass); //generates same error, even though using the sizeof()
//the class that has been #include in the .cpp. Shouldn't
//the type be known by now?
}

或者,这也行。

//Foo.h
class SomeClass;
class Foo
{
void doSomething(const SomeClass& subject)
}

//Foo.cpp
#include "Foo.h"
#include "SomeClass.h"
void Foo::doSomething(const SomeClass& subject)
{
sizeof(subject);
sizeof(SomeClass);
}

我正在使用 Microsoft Visual C++ 6.0。这是编译器的错误还是这通常违反标准?

在出现错误的示例中,请注意 sizeof(SomeClass) 是正在被 typedef 的原始类,而不是在 Foo 中创建的新 typedef 类型。我很惊讶在 typedef 中做一个前向声明限制了我对被 typedef 的类做任何事情的能力。


跟进:刚刚使用 XCode 编译器对其进行了测试,我相信我的 sizeof 问题是 Visual C++ 6.0 编译器问题。我猜 XCode 编译器可能是正确的,但目前我没有其他可以尝试的东西。因此,虽然这提供了很多信息,但我个人在当前任务上运气不佳,因为最佳答案不适合我的情况。

最佳答案

typedef class SomeClass SomeOtherName;

为你做这个把戏?

因此,仅将 typedef 用于指针或引用的编译单元不需要 #include SomeClass header 。

关于c++ - 转发 typedef 声明、对构建时间的影响和命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com