在 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/