如何在 C++ 中实现静态 类?

How to implement static classes in c++?

我想实现一个简单的静态 class,它在练习时用 C++ 计算整数的 pow 值。所以我的代码在这里:

#pragma once
#ifndef MATH_H
#define MATH_H
static class Math
{
    public:
        static int pow(int,int);
};


#endif /* MATH_H */

以及pow函数的实现:

#include "Math.h"

int Math::pow(int base, int exp){
    if(exp==1)
        return base;
    else if(exp%2==0)
        return pow(base,exp/2)*pow(base,exp/2);
    else
        return pow(base,exp/2)*pow(base,exp/2)*base;
}

但是 cygwin 编译器抛出编译错误:

In file included from Math.cpp:16:0:
Math.h:16:1: error: a storage class can only be specified for objects and functions
 static class Math
 ^~~~~~

请帮我解决问题。

C++ 没有 "static classes",因为它们正式存在于其他语言中。但是,您可以删除默认构造函数 (C++ >= 11) 或将其设为私有且未实现 (C++ < 11),这与使类型不可构造的效果相同:

// C++ >= 11
class Math
{
public:
    Math() = delete;
};

// C++ < 11
class Math
{
private:
    Math(); // leave unimplemented
};

使用此代码,行 Math m; 将失败:

(C++ >= 11) error: use of deleted function 'Math::Math()'

(C++ < 11) error: 'Math::Math()' is private within this context

然而,"static classes" 主要是 C++ 中的反模式,自由函数应该是首选。 (在某些情况下,static classes 可能很有用,特别是在进行模板元编程时。如果您不这样做,那么您几乎肯定不需要 static class。)

考虑改为在命名空间中声明函数:

namespace math {
    int pow(int, int);
}