静态助手类

Sir*_*lot 3 c++

在C#中我创建了一个静态类,它有许多我可以直接调用的数学辅助函数而无需创建类的实例.我似乎无法在C++中使用它.

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

float Variable1 = MathsClass.MultiplyByThree(Variable1);
Run Code Online (Sandbox Code Playgroud)

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

 'MathsClass' : illegal use of this type as an expression
Run Code Online (Sandbox Code Playgroud)

 error C2228: left of '.MultiplyByThree' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)

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

Ecl*_*pse 9

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

float Variable1 = MathsClass::MultiplyByThree(Variable1); 
Run Code Online (Sandbox Code Playgroud)

但是在C++中,自由函数通常比静态类函数更受欢迎,除非您有特定的理由将它们放在类中.为了将它们保持在一起,而不是污染全局命名空间,可以将它们放在它们自己的命名空间中:

在Math.h中

namespace Math
{
    float MultiplyByThree(float x);
}
Run Code Online (Sandbox Code Playgroud)

在Math.cpp中:

#include "math.h"

namespace Math
{
    float MultiplyByThree(float x)
    {
        return x * 3;
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

#include "math.h"

float Variable1 = Math::MultiplyByThree(Variable1); 
Run Code Online (Sandbox Code Playgroud)

更好的是,使它成为一个模板,相同的代码将适用于浮点数,双精度数,整数,复杂或任何已operator*定义的类型:

在Math.h中

namespace Math
{
    template <typename T>
    T MultiplyByThree(T x)
    {
        return x * 3;
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是你不能将定义分成math.cpp,它必须在标题中.