【问题标题】:One Method to be seen throughout the entire Project一种贯穿整个项目的方法
【发布时间】:2011-02-19 00:37:37
【问题描述】:

我有一个问题。我有一个随机数函数,我希望我的所有班级都可以使用它。

主要是,

我有这个功能

int RandomRange(int min, int max)
{
    int newValue = (rand() % max) + min;

    if ( newValue > max )
        newValue = max;
    if ( newValue < min ) 
        newValue = min;

    return newValue;
}

但我希望我的班级能够使用此功能。我该怎么做这样的事情?

【问题讨论】:

    标签: c++


    【解决方案1】:

    创建标题:

    #ifndef RANDOM_RANGE_H_INLCUDED_
    #define RANDOM_RANGE_H_INLCUDED_
    
    int RandomRange(int, int);
    
    #endif
    

    然后将该标头包含在任何需要使用该函数的文件中。

    当你有时间的时候,你可能想写一个更好的implementation函数。

    【讨论】:

      【解决方案2】:

      在头文件中声明为独立函数,然后到处#include它?

      【讨论】:

        【解决方案3】:

        “只在头文件中添加声明”的答案是正确的,但值得知道的是,您可以避免为定义使用单独的源文件,并链接相应的 .o 文件,方法是将其放入一个头文件:

        inline int RandomRange(int min, int max)
        {
            int newValue = (rand() % max) + min;
            // etc...
        }
        

        这更简单,但意味着包含该文件的每个源文件在编译时都必须处理完整定义,并且包含该文件的每个源文件都必须处理该文件需要的&lt;cstdlib&gt;包括以便致电rand()

        对于这么小的函数和像&lt;cstdlib&gt; 这样基本的头文件,担心它对完整构建的编译时间的影响是过早的优化,尽管当这个头文件被更改时它会明显影响部分构建.但是,也存在一些功能问题 - 如果您这样做,那么:

        (a) 使用此头文件并链接在一起的目标文件必须使用相同的 RandomRange 定义,因此对函数体内容的更改会破坏链接兼容性。这与 预处理之后是相同的 - 此示例中没有使用宏,因此无论哪种方式都是相同的,但这里可能会出错。

        (b) 您不能仅通过链接包含不同定义(用于调试、测试或链接时应用程序可配置性)的不同目标文件来替换 RandomRange 的定义。

        对于小型功能和小型项目,这些缺点通常不是问题。对于大型函数和大型项目,通常至少其中一些是,这就是为什么标准安全的事情是有单独的声明和定义。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 2012-09-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多