在 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;
}
下面的代码片段在调用回调函数时出现"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;
}