我很好奇我的 typedef 方法对我的构建的影响。
请考虑以下示例。
#include "SomeClass.h"
class Foo
{
typedef SomeClass SomeOtherName;
SomeOtherName* storedPointer;
void setStoredPointer(SomeOtherName* s);
}
void Foo::setStoredPointer(SomeOtherName* s)
{
storedPointer = s;
}
每当我遇到上述情况时,都会将 typedef 驱动到头文件中,因此需要我将其 #include 到头文件中。我担心缺少前向声明可能会导致更长的构建时间。
根据这篇文章的评论:
我可以转发声明类,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 编译器可能是正确的,但我目前没有其他尝试。因此,虽然这提供了信息,但我个人对我目前的任务不走运,因为最佳答案不适用于我的情况。