代码之家  ›  专栏  ›  技术社区  ›  Narek

定义函数?

c++
  •  0
  • Narek  · 技术社区  · 16 年前

    在C++中,当定义变量或false时,有任何函数返回“true”。像这样:

    bool isDefined(string varName)
    {
        if (a variable called "varName" is defined)
          return true;
        else
          return false;
    }
    
    8 回复  |  直到 10 年前
        1
  •  11
  •   Michael Krelin - hacker    16 年前

    C++ 不是动态语言。也就是说,答案是 . 您在编译时就知道这一点,而不是运行时。

        2
  •  6
  •   Arkaitz Jimenez    16 年前

    在运行时没有这样的事情,因为它在C++中是一种非动态语言。

    但是,您可以在sizeof中使用它来测试它是否在编译时存在而没有副作用。

    (void)sizeof(variable);
    

    如果var不存在,将停止编译。

        3
  •  1
  •   Community CDub    8 年前

    正如已经说过的,C++运行时系统不支持查询变量是否被声明。一般来说,C++二进制文件不包含关于变量符号或它们的映射到它们的位置的信息。从技术上讲,这些信息可以用调试信息编译成二进制文件,您当然可以查询调试信息,以查看代码中给定位置是否存在变量名,但这充其量只是一个肮脏的黑客行为(如果您想知道它会看到什么,我发布了一个糟糕的代码片段@ Call a function named in a string variable in C 它使用dwarf调试信息通过字符串调用C函数。不建议这样做)

        4
  •  1
  •   Cristian Adam    16 年前

    微软对C++有两个扩展名: __if_exists __if_not_exists . 在某些情况下,它们可能很有用,但不接受字符串参数。

    如果您真的需要这样的功能,您可以将所有变量添加到一个集合中,然后查询该集合中的变量存在。

        5
  •  0
  •   Nick Dandoulakis    16 年前

    已经提到C++没有提供这样的功能。

    另一方面,在某些情况下,操作系统实现机制 关闭 isDefined() ,
    GetProcAddress Function ,在Windows上。

        6
  •  0
  •   sellibitze    16 年前

    不,它不像你有一个运行在C++周围的运行系统,它在一些表(元数据)中记住名字的变量,并允许你通过动态生成的字符串访问变量。如果您想要这样做,您必须自己构建它,例如使用一个将字符串映射到某些对象的std::map。

    一些编译时机制将适合该语言。但我不认为这有什么用。

        7
  •  0
  •   progician    16 年前

    为了首先实现这一点,您需要实现一个动态变量处理系统,或者至少在互联网上找到一些。如前所述,C++被设计成一种本地语言,因此没有内置的工具来实现这一点。 对于最简单的解决方案,我可以建议创建一个带有字符串键的std::map,用boost::any、wxvariant或类似的方法存储感兴趣的全局变量,并将变量存储在此映射中。您可以通过一个预处理器指令来定义一个变量的名称,从而使您的生活变得更加简单,因此您不需要重新键入变量的名称两次。另外,为了让生活更容易,我建议创建一个访问这个变量映射的内联函数,并检查给定的字符串键是否包含在映射中。 在许多地方都有这样一个功能的实现,运行时属性处理系统以不同的方式可用,但是如果您只需要这个功能,我建议您自己实现,因为这些解决方案中的大多数都是您可能不需要的非常通用的。

        8
  •  0
  •   Trup Krup Drób Grób    10 年前

    您可以创建这样的函数,但它不会操作字符串。您必须发送变量名。这样的函数将尝试向变量添加0。如果它不存在,则会发生错误,因此您可能希望尝试使用 try...throw...catch . 但是因为我在打电话,我不知道在尝试将不存在的变量发送到函数时,这是否不会引发错误…