我想从全局命名空间中创建一个类的朋友函数,这似乎工作正常,除非友元函数使用这样的自定义返回类型:
typedef int Type;
Type myFunction();
namespace foo {
class Foo
{
public:
friend Type ::myFunction();
private:
void bar() {}
};
}
Type myFunction()
{
foo::Foo a;
a.bar();
return 0;
}
如果使用int
代替Type
代码编译,但使用typedef
编译器似乎不会将类型与命名空间分开,并给出错误:
error: expected a class or namespace
friend Type ::myFunction();
^
error: C++ requires a type specifier for all declarations
friend Type ::myFunction();
我在OS X上使用clang ++ 500.2.79。
我可以使用#define
代替typedef
作为示例中的解决方法,但在我的实际问题中,自定义类型来自另一个无法更改的头文件。
任何帮助将不胜感激。
答案 0 :(得分:5)
这适用于GCC,但在VS13中不起作用,或者如你所说,在clang ++中。但是,这解决了VS13中的问题:
friend Type (::myFunction());