c++ - 模板函数调用类中的 protected 方法?

标签 c++ templates pointer-to-member

我做了一个测试。我有一个模板函数,它带有一个类的成员方法指针的模板参数。当我在那里传递一个 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/

相关文章:

c++ - 对 __cxa_end_cleanup' 的 undefined reference

c++ - Qt中使用GET方法时如何添加token?

c++ - 无法将指向派生类函数的指针传递给基类

c++ - 将一个指向成员函数的指针转换为同一类的另一个指针

c++ - COLOR_ATTACHMENT's - 如何将多个纹理渲染为帧缓冲区对象内的颜色附件?

c++ - 指向输出错误值的数组的指针?

jquery 模板的 jquery 委托(delegate)问题

c++ - 模板类型推导中的隐式转换

c++ - 基于概念的模板成员函数重载

c++ - 指向成员函数的指针