什么是非重载成员指针和重载成员指针? 我正在阅读Bjarne Stroustrup的C++程序设计语言。我在模板部分看到了这句话

什么是非重载成员指针和重载成员指针? 我正在阅读Bjarne Stroustrup的C++程序设计语言。我在模板部分看到了这句话,c++,C++,模板参数可以是常量表达式(§C.5),即对象或函数的地址 带有外部链接(§9.2)或指向构件的非重载指针(§15.5) 什么是指向成员的非重载指针?有人能举个例子吗?一个指向成员的非重载指针如名称所述——一个指向未重载超类的成员的指针。这里有一个例子,我刚刚总结了什么会起作用,什么不会起作用: #include <iostream> class Foo { public: virtual void printN() { std::cout << 42; } };

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


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

一个指向成员的非重载指针如名称所述——一个指向未重载超类的成员的指针。这里有一个例子,我刚刚总结了什么会起作用,什么不会起作用:

#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;
}
#包括
福班{
公众:

虚拟void printN(){std::cout看起来像是引用了15.5…仅供参考,指向成员的指针不是指针。你知道一个例子,其中指向成员的重载指针无效吗?这不是使用PTM值作为模板参数,而是使用PTM类型。当我读到这个问题时,它是关于PTM值的。@VaughnCato我刚刚修改了这个例子以合并这个参数s、 @hvd我还不能编译使用PTM值作为模板参数(即
template
)?