【问题标题】:How do you check what parameter was passed onto a function?如何检查传递给函数的参数?
【发布时间】:2022-08-18 23:39:08
【问题描述】:

我想检查传递给函数的变量的名称是什么,例如:

void foo(char v[8][8]) {
    if(name of passed array == \'v\')
        //do something
    else if(name of passed array == \'w\')
        //do something else

这甚至会起作用吗? 我见过同样的问题,但它是针对 python 的,他们使用了 \"is\" (关键字)。 c++ 有没有等价物?

  • 你的意思是变量名还是变量类型?
  • 这不可能。 v 是函数中变量的名称。您从外部传递的内容在此范围内不存在。好的 c++ 书籍参考应该出现在评论部分的某个地方。考虑先阅读它们,C++ 不是那么简单的语言
  • 不,C++ 与 python 不同。 \"keyword is\" 的等价物可能是指针比较,但这没有多大意义。解释你到底想做什么,因为很难从坏例子中分辨出来。如果您需要将二维数组传递给函数,请以std::vector<std::vector<char> > 开头。
  • 通常,如果想要获取变量的名称或代码中的整个表达式,他们会使用宏
  • @IłyaBursov 变量名

标签: c++ function parameter-passing


【解决方案1】:

C++ 无法做到这一点。

如果您真的想这样做,请使用元数据创建一个结构:

struct A
{
char name;
char v[8][8];
}

void foo(A &a)
{
 if(a.name == 'v'){
 //do something
 }
 else(a.name == 'w')
 {
 //something else
 }
}

【讨论】:

    【解决方案2】:

    我扩展了我对宏的想法,之前我在评论中写过:

    #define foo_wrapper(exp) \
    if (#exp == "w"){...}\
    foo(exp);
    

    以下是有关使用宏对表达式进行字符串化的信息:https://gcc.gnu.org/onlinedocs/gcc-4.8.5/cpp/Stringification.html

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2015-02-21
      • 2016-11-26
      • 2015-06-09
      • 1970-01-01
      • 2016-05-07
      相关资源
      最近更新 更多