在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++等价物来提供这种功能?
简单的答案是使用::运算符而不是.运算符:
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,它必须在标题中.
| 归档时间: |
|
| 查看次数: |
6886 次 |
| 最近记录: |