使用默认值转发声明类

时间:2015-02-11 10:14:59

标签: c++ default-value forward-declaration

我有一个前向声明,但希望将前向声明的类的实例作为默认值。

所以我的代码看起来或多或少是这样的:

bar.h

class Foo;

class Bar
{
public:    
    Bar();
    void test(Foo foo = Foo(7));
}

和foo.h

class Foo
{
public:
    Foo(int val);
}

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

没有。当你声明一个方法/函数哪个参数是Foo时,编译器应该已经知道Foo的大小,所以它应该已经在那时被定义了。如果您声明但未定义Foo,则可以仅使用指针或引用它。

答案 1 :(得分:1)

如另一个答案所述,这是不可能的。

除此之外,默认值是代码气味。它们使您的界面变得脆弱

使用方法重载:

class Foo;

class Bar
{
public:    
    Bar();
    void test();           // implement with default value, and document it
    void test(Foo foo);    // implement with user-supplied value
}

bar.cpp

#include "foo.h"   // Complete Foo is available here

void Bar::test()
{
    test(Foo(42));
}

void Bar::test(Foo foo)
{
    ...
}