我做了一个测试。我有一个模板函数,它带有一个类的成员方法指针的模板参数。当我在那里传递一个 protected 成员方法指针时,模板函数可以调用 protected 方法。这合理吗?我认为它也适用于私有(private)方法。
感谢删除了我的代码的注释。我简化了我的代码并找到了原因。
template<class T, void (T::*f)()>
void foo(T t)
{
(t.*f)();
}
class A
{
public:
void g() { foo<A, &A::f>(*this); } // ok for access in class A scope
protected:
void f() {}
};
int main()
{
A a;
a.g();
//foo<A, &A::f>(a); // error, no access to the protected method in this scope.
return 0;
}
编译器很聪明!
最佳答案
如果您故意将东西交给某人,他们就可以访问它。
这与您可以通过例如一个私有(private)的 int 成员作为你想要的任何地方的参数,甚至通过引用,这样他们就可以修改它。
从某种意义上说,protected/private 可以防止盗窃,而不是礼物。
关于c++ - 模板函数调用类中的 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22815192/