gpt4 book ai didi

c++ - 能够使用函数指针调用外部类的私有(private)方法

转载 作者:IT老高 更新时间:2023-10-28 22:34:47 34 4
gpt4 key购买 nike

基于以下answer到最近的 question ,我可以使用函数指针来调用私有(private)方法Foo<T>::foo()来自另一个类(class)Bar ,如下图(另见ideone)

#include <iostream>

template<typename T>
struct Bar
{
typedef void (T::*F)();

Bar( T& t_ , F f ) : t( t_ ) , func( f )
{
}

void operator()()
{
(t.*func)();
}

F func;
T& t;
};

template<typename T>
class Foo
{
private:
void foo()
{
std::cout << "Foo<T>::foo()" << std::endl;
}

public:
Foo() : bar( *this , &Foo::foo )
{
bar();
}

Bar<Foo<T> > bar;
};

int main()
{
Foo<int> foo;
}

这适用于 MSVC 2013 和 GCC 4.8.3。有效吗?

最佳答案

C++ 标准说

11.1 A member of a class can be
(1.1) — private; that is, its name can be used only by members and friends of the class in which it is declared.

即访问说明符应用于名称,而不是可执行代码。如果您考虑一下,这是有道理的,因为访问说明符是编译时构造。

关于c++ - 能够使用函数指针调用外部类的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537482/

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