指向成员函数的模板函数指针

Templated function pointer to member function

本文关键字:函数 指针 成员      更新时间:2023-10-16

大家好,新年快乐等。

我在模板化某些函数指针时遇到问题:

到目前为止的代码如下:

    template<class T>
    class EventMapper
    {
    private:
        typedef std::wstring const (T::*messageHandler)(std::wstring const & myMessage);                //!< Templated function pointer
        typedef std::tr1::unordered_map<std::wstring, messageHandler> umap;                             //!< abbreviation for eventHandler map container
        typedef umap::const_iterator eventCIt;                                                          //!< abbreviation for event map const_iterator
        typedef umap::iterator  eventIt;                                                                //!< abbreviation for event map iterator
        //test func ptr
        T const & myInstance;
        umap myEventMap;
        eventCIt myCurrentCommand;                                                                      //!< current selected command
    public:
        EventMapper( T const & instance_in) : myInstance(instance_in){}
        //register an event handler
        void registerHandler(std::wstring const & cmd_in, messageHandler handler_in)
        {
            this->myEventMap.insert(umap::value_type(cmd_in, handler_in));
        }

我在MSVS 2008 SP1:下得到这个错误

Error   3   error C2146: syntax error : missing ';' before identifier 'eventCIt'    o:AX_FusRecAlgincludeReconstructionJobListEditorTypes.h    19  AX.Services.Reconstruction.JobListDataProviderTest

不太具有描述性。我想做的事情有可能吗?欢迎任何提示!谢谢

要修复代码,请使用typename:

        typedef typename umap::const_iterator eventCIt;                                                          //!< abbreviation for event map const_iterator
        typedef typename umap::iterator  eventIt;

有关更多信息,请查看依赖于模板的名称