Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++继承函数指针,它可以与只派生方法一起使用_C++_Pointers_Inheritance - Fatal编程技术网

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问题吗?我知道这不起作用,因为它们是不相关的类型。是否有一种类型适用于所有派生类,即非类特定的类或通过继承处理彼此相关的类?我知道它不起作用,因为它们是不相关的类型。是否有一种类型适用于所有派生类,即不特定于类的类或通过继承处理彼此相关的类的类?