gpt4 book ai didi

函数指针的 C++ 映射到类模板的静态方法

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:18 27 4
gpt4 key购买 nike

有很多函数指针映射到静态和非静态成员的很好的例子——我一直没能找到一个也使用类模板的例子。

我在使用以下代码时无法理解此错误消息:

tclass.H:34:16: error: cannot convert ‘int (*)(MyPair*)’ to ‘std::map, int (MyPair::*)(MyPair*), std::less >, std::allocator, int (MyPair::*)(MyPair*)> > >::mapped_type {aka int (MyPair::*)(MyPair*)}’ in assignmentf[ "max" ] = &MyPair::max;

Code in question is:

#include <map>

using namespace std;

template <class T>
class MyPair {
public:
MyPair (T first, T second) :
a( first ), b( second ) {}

static T max( MyPair* );

T call( const string& name ) {
func f = s_funcs[ name ];
return ( this->*f )( this );
}

protected:
typedef T ( MyPair::*func ) ( MyPair<T>* );
typedef map<string, func> FuncMap;

static FuncMap initMap();
static FuncMap s_funcs;

T a, b;
};

template <class T>
typename MyPair<T>::FuncMap MyPair<T>::s_funcs = initMap();

template <class T>
typename MyPair<T>::FuncMap MyPair<T>::initMap() {
FuncMap f;
f[ "max" ] = &MyPair<T>::max;
return f;
}

template <class T>
T MyPair<T>::max ( MyPair<T>* pair ) {
T retval;
retval = pair -> a > pair -> b ?
pair -> a :
pair -> b;
return retval;
}

最佳答案

(清理消息中的一些杂物...)

error: cannot convert int (*)(MyPair*) to int (MyPair::*)(MyPair*) in assignment

您已将 T 定义为指向成员函数的指针:

typedef T ( MyPair::*func ) ( MyPair<T>* );

但是,static 成员函数不能分配给该类型。它分配给一个常规函数指针。

如果您希望 map 包含static 函数,请将T 更改为:

typedef T ( *func ) ( MyPair<T>* );

关于函数指针的 C++ 映射到类模板的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28144777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com