在 C++ 上下文中无效使用 void 表达式 std::function

invalid use of void expression in context of c++ std::function

下面的代码片段在调用回调函数时出现"Invalid use of void expression"错误 由编译器闪现。

#include <iostream>
#include <functional>
using namespace std;
template<class type>
class State {
public:
State(type type1,const std::function<void (type type1 )> Callback)
 {

 }

};

template <class type>
void Callback(type type1 )
{
  //Based on type validation will be done here
}

 int main()
 {
  State<int> obj(10,Callback(10));
  return 0;
}

只是想知道这里出了什么问题,以便解决同样的问题。

您似乎想将 Callback<int> 函数本身而不是它的 return 值(有 none)传递给 obj 的构造函数。所以就这样做:

State<int> obj(10, Callback<int>);

您当前的代码实际上首先 调用 Callback(10) 然后尝试将其 void "return value" 传递给 obj。在 C++ 中不允许传递 void,这就是编译器抱怨的原因。 (Callback(10) 是这里的“void 表达式”。)

我想这就是你想要的

#include <iostream>
#include <functional>

using namespace std;
template<class type>
class State {
public:
State(type type1,const std::function<void (type)> callback)
 {
    callback(type1);
 }

};

template <class type>
void Callback(type type1 )
{

}

 int main()
 {
  State<int> obj(10, Callback<int>);
  return 0;
}

我想使用 lambda 表达式方法来避免混淆:

#include <iostream>
#include <functional>
using namespace std;
template<class type>
class State 
{
public:
State( type type1, const std::function<void (type type1 )> Callback)

    {
        Callback(type1);
    }
};

int main()
{

 State<int > monitor(10,[] ( int fault) {std::cout<<"Any Message"; });
 return 0;

}