【问题标题】:How to pass the address of the overloaded method to template method [duplicate]如何将重载方法的地址传递给模板方法[重复]
【发布时间】:2020-12-01 22:24:16
【问题描述】:

我正在学习模板并坚持以下案例:

class ClassA {
   LPCWSTR   Name(void) {...};
   UINT      Name(LPCWSTR name) {...};
   LPCWSTR   Surname(void) {...};
   UINT      Surname(LPCWSTR name) {...};
}

class ClassB {
    template <class T>
    bool SetValue(UINT(T::*Setter)(LPCWSTR), T& object, LPCWSTR value) {
        (object.*Setter)(value)
    }
}

class ClassC : ClassB {
    SomeMethod() {
        ClassA a;
        // Compiler says it can't determine what overloaded instance to choose here.
        SetValue(&ClassA::Name, a, "Mike");
    }
}

如何传递正确的方法地址?

【问题讨论】:

    标签: c++ templates overloading


    【解决方案1】:

    你可以这样指定你想要的:

    SetValue<ClassA>(&ClassA::Name, a, "Mike");
    

    SetValue(static_cast<UINT(ClassA::*)(LPCWSTR)>(&ClassA::Name), a, "Mike");
    

    Demo

    【讨论】:

    • 成功了,谢谢。
    猜你喜欢
    • 2017-02-07
    • 2012-06-10
    • 2018-07-14
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多