没有typedef返回成员函数指针的语法是什么?

时间:2018-03-20 18:42:20

标签: c++ operator-overloading typedef return-type

这是一个C ++ 03问题。

在以下代码中,class Foo实现了operator[],它返回指向成员函数的指针。该代码目前通过返回TFunc的引用来执行此操作,typedefoperator[]成员函数。

我想学习:如果不使用typedeftypedef定义的语法是什么?你可以看到我徘徊了一下,没有成功,尝试。我的第一个想法是#include <iostream> #include <map> #include <string> template <typename T> class Foo { public: typedef void (T::*TFunc)( const std::string&, const std::string& ); typedef std::map< std::string, TFunc > FooMap; operator FooMap&() { return member_; } //void (T::*)( const std::string&, const std::string& ) operator []( const std::string& str ) //void (T::*&)( const std::string&, const std::string& ) operator []( const std::string& str ) //void (T::*)&( const std::string&, const std::string& ) operator []( const std::string& str ) //void (T::*)( const std::string&, const std::string& )& operator []( const std::string& str ) TFunc& operator []( const std::string& str ) { return member_[ str ]; } private: FooMap member_; }; class Bar { public: void func() { fb_["a"] = &Bar::abc; } void callFunc( const std::string& str, const std::string arg1, const std::string& arg2 ) { (this->*fb_[ str ])( arg1, arg2 ); } void abc( const std::string& key, const std::string& val ) { std::cout << key << ": " << val << std::endl; } private: Foo<Bar> fb_; }; int main( int argc, char* argv[] ) { Bar b; b.func(); b.callFunc( "a", "hello", "world" ); return 0; } 像宏一样工作,即简单的字符串替换应该起作用 - 但显然不行。我试过的所有其他变种都没有。

process (state)--(CLK, reset,ADD,SHIFT,LOAD,STOP,STRT,LSB)

2 个答案:

答案 0 :(得分:4)

丑陋的语法是:

void (T::*&operator [](const std::string& str))(const std::string&, const std::string&);

Demo

答案 1 :(得分:3)

在C ++ 14或更高版本中,您可以使用

decltype(auto)

作为返回类型

您也可以考虑使用std:: function代替您当前拥有的地图的值类型。