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

发布于 2024-12-26 10:31:36 字数 1606 浏览 4 评论 0原文

大家好,新年快乐等等。

我在模板化一些函数指针时遇到了麻烦:

到目前为止的代码如下:

    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_FusRecAlg\include\Reconstruction\JobListEditor\Types.h    19  AX.Services.Reconstruction.JobListDataProviderTest

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

Hi all happy new year etc.

I am having trouble with templating some function pointer :

The code so far is as follows :

    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));
        }

I get this error under MSVS 2008 SP1 :

Error   3   error C2146: syntax error : missing ';' before identifier 'eventCIt'    o:\AX_FusRecAlg\include\Reconstruction\JobListEditor\Types.h    19  AX.Services.Reconstruction.JobListDataProviderTest

Not very descriptive. Is what I am trying to do even possible? Any tips would be welcome! Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深爱不及久伴 2025-01-02 10:31:36

要修复代码,请使用 typename

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

有关更多信息,请查看 模板相关名称

To fix your code, use typename :

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

For more information, look template dependent names

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文