所以我想创建一个带有参数的函数,这是一个条件,所以我可以用不同的条件调用函数,例如。
int input(string condition){
int number;
cin>>number;
if (!condition){
cout<<"Wooah maaan, thx!"
} else {
cout<<"You can do better!"
return number;
}
void something(){
int g_num;
cout<<"Give me a number between 1 and 6";
g_num=input("number<6&&number>1");
}
这怎么可能,因为有类似的我得错误:
无法在“assignmen”中将“std :: string”转换为“bool”
有什么想法吗?
(我刚开始学习c ++,所以请不要评判我,我知道我很蹩脚。)
答案 0 :(得分:2)
这是可能的,但这是一项非常重要的任务,如果可以,你可能想避免这样做。
如果您决定继续进行,则需要定义要支持的表达式的语法,为该语法编写解析器,然后评估表达式。您可能希望为解析器考虑Boost Spirit或byacc之类的内容。这将有教程和演示,至少给出了如何定义语法的一些想法。
答案 1 :(得分:0)
您尝试的是在运行时执行代码,该代码位于字符串中。你不能直接做到这一点只能通过使用某种托管脚本引擎来实现,这不是微不足道的。
您可以做的是存储号码并评估条件
int input(bool condition){
if (!condition){
cout<<"Wooah maaan, thx!"
} else {
cout<<"You can do better!"
return number;
}
void something(){
int g_num;
cout<<"Give me a number between 1 and 6";
int number;
cin>>number;
g_num=input(number<6 && number>");
}
该代码仍然存在问题,如果将一个错误的数字传递给程序的其余部分会发生什么。
答案 2 :(得分:0)
条件不能是字符串形式。就这样做:
int input()
{
int number;
cin >> number;
if ((number > 1) && (number < 6)) {
cout << "Wooah maaan, thx!"
} else {
cout << "You can do better!"
return number;
}
答案 3 :(得分:0)
这不是它的工作方式,字符串文字不能神奇地变成可执行代码。
获得所需内容的一种方法是接受一些可用作谓词的可调用对象的函数模板。例如:
template<typename Function>
int input(Function f) // the type of f is deduced from the call to this
{ // function
int number;
if (!(cin >> number)) return -1; // input validation!
if (f(number))
cout << "thanks!";
else
cout << "meh...";
return number;
}
您可以以不同的方式使用它 - 传递一个指向函数的指针,一个重载函数调用操作符(operator()
)或lambda函数的类型的对象。您将作为参数传递的对象存在约束 - 它需要使用int
类型的一个参数进行调用,并且需要返回某些可转换为bool
的类型。
示例:
int g_num = input( [](int i){ return i > 1 && i < 6; } ); // pass a lambda
答案 4 :(得分:0)
您可以使用lambda表达式而不是字符串。例如
#include <functional>
int input( std::function<bool( int x )> f )
{
int number;
cin>>number;
if (! f( number ))
{
cout<<"Wooah maaan, thx!"
}
else
{
cout<<"You can do better!"
}
return number;
}
input( []( int ) { return ( ( std::cout << "The first\n" ), true ); } );
input( [] ( int ){ return ( ( std::cout << "The second\n" ), false ); } );