我收到以下示例的编译错误:
template<typename Callback>
struct CallBackStruct {
CallBackStruct(uint freq, Callback callback) :
freq_(freq), cb_(std::move(callback)) {
}
private:
void loop() {
for (int i= 0; <interval_; ++i){
cb_();
}
}
uint freq_;
Callback cb_;
};
现在我需要定义一个具有 CallBackStruct 变量的类,例如:
class MyTestClass final {
public:
MyTestClass (string name): name_(name){}
void start_testing();
void stop_testing();
private:
void method1 (int v);
void method2 (int v);
void method3 (int v);
string name_;
CallBackStruct<&decltype(MyTestClass::method1)> t1;
CallBackStruct<&decltype(MyTestClass::method2> t2;
CallBackStruct<&decltype(MyTestClass::method3> t3;
};
我计划在 MyTestClass::start_testing() 方法中初始化并实例化 CallBackStruct 结构的对象。喜欢
void MyClassTest::start_testing() {
t1 = CallBackStruct(freq1, [&]() {
method1(freq1); });
t2 = CallBackStruct(freq2, [&]() {
method3(freq2); });
t3 = CallBackStruct(freq3, [&]() {
method3(freq3); });
}
但是当我尝试上面的代码时,我收到编译错误:
错误:没有匹配的函数可用于调用“CallBackStruct”
&)>::CallBackStruct()’ 86 |姓名_(姓名){}
有什么建议如何解决吗?是因为 t1、t2 和 t3 没有在 MyTestClass 构造函数中初始化吗?如果是这个问题,我该如何在构造函数中初始化它们。 我有一个限制,我无法更改 MyClassTest 构造函数,因为它已被其他现有组件使用。
您可以使用类内初始化程序。
class MyTestClass final {
public:
MyTestClass (string name): name_(name){}
void start_testing();
void stop_testing();
private:
void method1 (int v);
void method2 (int v);
void method3 (int v);
string name_;
CallBackStruct<decltype(&MyTestClass::method1)> t1{4,&MyTestClass::method1};
CallBackStruct<decltype(&MyTestClass::method2)> t2{2,&MyTestClass::method2};
CallBackStruct<void (MyTestClass::*)(int)> t3{3,&MyTestClass::method3};
};