【问题标题】:friend function in global namespace with custom return type全局命名空间中具有自定义返回类型的友元函数
【发布时间】:2014-08-12 04:17:08
【问题描述】:

我想从全局命名空间中创建一个类的友元函数,这似乎工作正常,除非友元函数使用这样的自定义返回类型:

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 作为解决方法,但在我的实际问题中,自定义类型来自另一个无法更改的头文件。 任何帮助将不胜感激。

【问题讨论】:

标签: c++ namespaces clang friend


【解决方案1】:

这在 GCC 中有效,但在 VS13 中无效,或者如您所说,在 clang++ 中无效。但是,这解决了 VS13 中的问题:

friend Type (::myFunction());

【讨论】:

  • 谢谢!也适用于 clang++。
  • 貌似friend Type (::myFunction)(); 也有效。
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2011-01-15
  • 2019-09-21
  • 2012-06-11
  • 2012-06-11
相关资源
最近更新 更多