我创建了以下简化的工作示例-其中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
构造函数作为成员变量存储。