【发布时间】:2018-07-12 11:31:39
【问题描述】:
让我们在S的声明中定义f,作为S的友元函数:
struct S
{
friend void f() {}
};
我找不到联系f的方法。
那么,这样的内联友元函数真的只能用argument-dependant lookup调用吗?
struct S
{
friend void f() {}
friend void g(S const&) {}
} const s;
int main()
{
// f(); // error: 'f' was not declared in this scope
// S::f(); // error: 'f' is not a member of 'S'
g(s);
// S::g(s); // error: 'g' is not a member of 'S'
}
奖励:如果我想获得一个函数指针/std::function/lambda 到g,该怎么办?
【问题讨论】:
-
请注意,如果您在或
S的定义之前声明(但未定义)f,则一切正常。
标签: c++ language-lawyer friend argument-dependent-lookup name-lookup