gpt4 book ai didi

c++ - 获取内联定义的友元函数的地址

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:41 25 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>

struct foo {
friend void bar(foo) {}

void foobar() {
std::cout << &bar << '\n'; // error
}
};

int main() {
bar(foo{}); // ok, visible through ADL
foo{}.foobar();
}

gcc给我这个错误:

main.cpp: In member function 'void foo::foobar()':
main.cpp:7:23: error: 'bar' was not declared in this scope
std::cout << &bar << '\n'; // error
^~~

那是因为 bar 是类本身定义的友元函数,使其在全局命名空间中不可见。访问它的唯一方法是通过 ADL,但我还没有找到使用 ADL 获取 bar 地址的方法。

所以我的问题是,如何获取bar 的地址?除了在 foo 之外定义 bar 之外,还有其他方法吗?

最佳答案

您可以在不同翻译单元的封闭命名空间范围内声明友元函数:

foo.hpp 中:

#include <iostream>
struct foo;
void (*get_bar_address())(foo);
struct foo {
friend void bar(foo) {}

void foobar() {
std::cout << get_bar_address() << '\n'; // no error
}
};

foo.cpp

#include "foo.hpp"
void bar(foo);
void (*get_bar_address())(foo){
return bar;
}

关于c++ - 获取内联定义的友元函数的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com