簡體   English   中英

什么是非重載指向成員的指針和重載指向成員的指針?

[英]What is non overloaded pointer to member and overloaded pointer to member?

我正在閱讀Bjarne Stroustrup的C ++編程語言。 我在模板部分看到了聲明。

模板參數可以是常量表達式(§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;
}

在PrintData中,創建了類的實例,並且在類的實例化版本上取消引用傳遞的成員指針,從而導致調用它的底層函數。

模板使這種方法更靈活,但我還沒有找到在真實情況下使用這樣的代碼的理由 - 如果有人能找到一個我喜歡開悟的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM