类方法在铸造后失去了私人修饰符
Class method loses private modifier after cast
我需要设置回调,但是我不想使其成为全局功能,我不需要公开它,所以我已经将其私有化了。想知道,这是正确的方法。
class A // button object from window library. I wont change this class
{
public:
typedef void (*fptr)();
void set(fptr p)
{
p(); // here I call private static of B
};
};
class B // my own class
{
private:
static void prfn() {};
public:
B()
{
A a;
a.set(prfn);
};
};
int main(){B b;}
这很好,因为您需要仅在B类中访问混凝土(私有)功能。匹配功能指针定义。
您的代码很好。它与以下标准成语没有什么不同:
class Foo
{
int n;
public:
int & the_int() { return n; }
};
通过公共功能公开私人会员是完全可以的。(这可能不是一个好的设计,但完全合法。)您正在通过使用私人成员作为其他无关目的的函数参数来做同样的事情。请注意,只有您自己的class B
才能访问B
的私人成员。
首先,您使用A
中未引入的set
您想说call
吗?第二,为什么您应该使用另一个类来调用自己类的某些功能(事件public
或private
)?您可以简单地说:
B() { prfn(); }
好,如果要实现要将其传递到另一个类的回调,并且该功能不应由类的其他用户直接调用,那么您当然可以做正确的事,并且您的功能应该是私有的!
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- 函数从唯一代码调用正确的子类方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- 类方法在铸造后失去了私人修饰符