如何传递一个必须被视为模板类型成员函数的函数?



我创建了以下简化的工作示例-其中class Manager接受模板参数,并且必须针对模板参数调用成员函数get_timestamp

class Ex1 {
public:
int timestamp;
int get_timestamp() {return timestamp;};

};

template<typename T>
class Manager {

public:
void process_data(T& type) {

type.get_timestamp(); // 
}    

};

int main()
{
Manager<Ex1>();
return 0;
}

我正在寻找一个解决方案,我可以将这个type.get_timestamp();替换为type.FUNC(args);,其中FUNC分别传递到类中。类似于传递lambda或std::function,但这里的不同之处在于,我必须指示类将这个类似lambda的函数作为模板参数的成员函数。这在c++中可能吗?我正在使用c++20

可以将成员函数指针作为模板参数传递:

template<typename T, int(T::*FUNC)()>
class Manager {
public:
void process_data(T& type) {
(type.*FUNC)();
}
};
Manager<Ex1, &Ex1::get_timestamp> mgr;

当然,你也可以将它作为运行时参数传递给process_data(),或者传递给Manager构造函数作为成员变量存储。

最新更新