具有自定义返回类型的全局命名空间中的友元函数
friend function in global namespace with custom return type
我想从全局命名空间创建一个类的友元函数,这似乎工作得很好,除非友元函数使用像这样的自定义返回类型:
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
作为解决方案,但在我的实际问题中,自定义类型来自另一个头文件,无法更改。
这在GCC中工作,但在VS13中不起作用,或者如您所说,在clang++中不起作用。但是,这修复了VS13中的问题:
friend Type (::myFunction());
相关文章:
- C++模板来检查友元函数的存在
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- C++ 友元函数和私有构造函数
- 使第二个类的构造函数成为第一个类中的友元函数
- 未定义的类模板不会实例化以检查友元函数
- C++类中的友元函数有问题?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 模板类中的模板友元函数
- C++ 17 个友元函数声明和内联命名空间
- 友元函数需要一个帮助程序函数
- 在类内定义的友元函数与类外定义的友元函数的查找规则之间的差异
- 运算符重载在 C++ 中使用友元函数
- 类C++友元函数无法访问封装的类
- 函数指针作为友元函数