在C++和Objective-C中,我养成了前向声明不需要在头文件中定义的必要类的习惯,然后在需要时将定义这些类的头文件导入源文件中。

是否曾经有过这样的主意?

(我知道前向声明的最大缺点是不完整类型的可用性有限。出于这个问题的目的,假设在 header 中,我只需要将前向声明的类用作不完整类型。)

最佳答案

有时您可以巧妙地更改程序的语义而不会引起任何错误

class Foo;

template < typename T>
struct Trait
{
    static const int MY_TYPE = -1;
};

// Lets say this is Foo.h
//class Foo
//{
//};
//template<>
//struct  Trait<Foo>
//{
//  static const int MY_TYPE = 1;
//};

void TestFunction(Foo& f)
{
    std::cout << Trait<Foo>::MY_TYPE << std::endl;
}

考虑上面的代码,注释掉的代码位于 header 中。如果包含标题,TestFunction将打印1否则为-1

07-24 09:45
查看更多