C++继承函数指针,它可以与只派生方法一起使用
这是一个设计问题的简化示例 我有班级基础。它具有函数指针类型和该函数指针类型的受保护变量C++继承函数指针,它可以与只派生方法一起使用,c++,pointers,inheritance,C++,Pointers,Inheritance,这是一个设计问题的简化示例 我有班级基础。它具有函数指针类型和该函数指针类型的受保护变量 #ifndef BASE_H #define BASE_H class Base { typedef void (Base::*FunctionPointer) ( void ); protected: FunctionPointer pointer; }; #endif /* BASE_H */ 然后我得到了从基继承的类。此类希望能够将继承的指针变量设置为它自己的方法的地址
#ifndef BASE_H
#define BASE_H
class Base {
typedef void (Base::*FunctionPointer) ( void );
protected:
FunctionPointer pointer;
};
#endif /* BASE_H */
然后我得到了从基继承的类。此类希望能够将继承的指针变量设置为它自己的方法的地址,而不是从基继承或重写的方法的地址
问题在于函数指针void Base::*函数指针void和void派生::*函数指针void的类型不同
总之
有没有一种方法可以在基类中有一个指针变量,该变量可以分配给未重写的派生类和方法
有没有一种方法可以在基类中有一个指针变量,该变量可以分配给未重写的派生类和方法
不,你不能那样做。它们是不相关的类型
有没有一种方法可以在基类中有一个指针变量,该变量可以分配给未重写的派生类和方法
不,你不能那样做。它们是不相关的类型。我支持@RSahu:这是不可能的,因为它们是不相关的类型。 我添加这个答案是出于好奇 您可以使用CRTP习惯用法执行类似的操作:
template<class D>
struct B {
using FnType = void(D::*)();
FnType ptr{nullptr};
};
struct D: B<D> {
D(): B{} {
ptr = &D::method;
}
void method() { }
};
这并不是你想要的,但至少是一个可行的解决方案。我支持@RSahu:这是不可能的,因为它们是不相关的类型。 我添加这个答案是出于好奇 您可以使用CRTP习惯用法执行类似的操作:
template<class D>
struct B {
using FnType = void(D::*)();
FnType ptr{nullptr};
};
struct D: B<D> {
D(): B{} {
ptr = &D::method;
}
void method() { }
};
这不完全是您所要求的,但至少是一个可行的解决方案。您能详细说明您的Y用例,而不是提出X问题吗?您能详细说明您的Y用例,而不是提出X问题吗?我知道这不起作用,因为它们是不相关的类型。是否有一种类型适用于所有派生类,即非类特定的类或通过继承处理彼此相关的类?我知道它不起作用,因为它们是不相关的类型。是否有一种类型适用于所有派生类,即不特定于类的类或通过继承处理彼此相关的类的类?