c++ - 静态辅助类

标签 c++

在 C# 中,我创建了一个静态类,其中包含许多我可以直接调用的数学辅助函数,而无需创建该类的实例。我似乎无法让它在 C++ 中工作。

例如,如果类名为 MathsClass 并且有一个名为 MultiplyByThree 的函数,那么我会像这样使用它:

float Variable1 = MathsClass.MultiplyByThree(Variable1);

在我的代码的 C++ 版本中,我收到错误:

 'MathsClass' : illegal use of this type as an expression

 error C2228: left of '.MultiplyByThree' must have class/struct/union

我如何编写 C# 静态类的 C++ 等价物来提供这种功能?

最佳答案

简单的答案是使用 :: 运算符而不是 . 运算符:

float Variable1 = MathsClass::MultiplyByThree(Variable1); 

但在 C++ 中,自由函数通常优于静态类函数,除非您有特定原因将它们放在类中。为了将它们放在一起,并且不污染全局命名空间,您可以将它们放在自己的命名空间中:

在数学中

namespace Math
{
    float MultiplyByThree(float x);
}

在 Math.cpp 中:

#include "math.h"

namespace Math
{
    float MultiplyByThree(float x)
    {
        return x * 3;
    }
}

并使用它:

#include "math.h"

float Variable1 = Math::MultiplyByThree(Variable1); 

更好的是,将其设为模板,相同的代码将适用于 float 、 double 、整数、复数或任何定义了 operator* 的类型:

在数学中

namespace Math
{
    template <typename T>
    T MultiplyByThree(T x)
    {
        return x * 3;
    }
}

唯一的问题是您不能将定义分离到 math.cpp 中,它必须在标题中。

关于c++ - 静态辅助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067394/

相关文章:

C++ SSE 和对齐的整数数组和整数 vector

c++ - 类函数指针作为静态函数中的参数

C++ 如何设置 float 的小数部分?

c# - Unity3d DllNotFoundException 显示我的计算机上不存在的目录

c++ - 如何使用此 protected 成员函数获取所需的输出

c++ - 动态数组分配 C++

c++ - Ubuntu 14 中 QtCreator [Yocto Image] 的交叉编译错误

c++如何保存 vector 项和 double

c++ - 保留插入顺序但不允许重复的 STL 容器

C++ : generic getter/setter for each single member of private struct