gpt4 book ai didi

c++ - 什么是指向成员的非重载指针和指向成员的重载指针?

转载 作者:太空狗 更新时间:2023-10-29 23:18:10 25 4
gpt4 key购买 nike

我正在阅读 Bjarne Stroustrup 的 C++ 编程语言。我在模板部分看到了声明。

模板参数可以是常量表达式(§C.5)、对象或函数的地址具有外部链接(§9.2),或指向成员的非重载指针(§15.5)。

什么是指向成员的非重载指针?谁能举个例子?

最佳答案

非重载的指向成员的指针正如其名称所述——指向未重载父类(super class)的成员的指针。下面是我刚刚整理的一个示例,说明哪些有效,哪些无效:

#include <iostream>

class Foo {
public:
virtual void printN() { std::cout << 42; }
};

class Bar : public Foo {
public:
void printN() { std::cout << 31; }
};

template <typename T, typename C>
class SomeTemplate {
public:
void PrintData(T d) { C c; (c.*d)(); }
};

int main() {
SomeTemplate<void (Foo::*) (), Foo> t; // Compiles - '42'
t.PrintData(&Foo::printN);

SomeTemplate<void (Bar::*) (), Bar> t; // Compiles - '31'
t.PrintData(&Bar::printN);

SomeTemplate<void (Foo::*) (), Bar> t; // Won't compile, can't convert overloaded pointers
t.PrintData(&Foo::printN);
return 0;
}

在 PrintData 中,类的一个实例被创建,传递的成员指针在类的实例化版本上被取消引用,导致它的底层函数被调用。

模板使这种方法更加灵活,但我还没有找到在真实情况下使用此类代码的理由——如果有人能找到一个,我很乐意得到启发......

关于c++ - 什么是指向成员的非重载指针和指向成员的重载指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14495018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com