如何在c++中创建静态类?我应该可以这样做:
cout << "bit 5 is " << BitParser::getBitAt(buffer, 5) << endl;
假设我创建了BitParser类。BitParser类定义是什么样子的?
如何在c++中创建静态类?我应该可以这样做:
cout << "bit 5 is " << BitParser::getBitAt(buffer, 5) << endl;
假设我创建了BitParser类。BitParser类定义是什么样子的?
当前回答
如果你正在寻找一种将“static”关键字应用到类的方法,就像在c#中一样
静态类只是编译器牵着你的手,阻止你编写任何实例方法/变量。
如果你只是写一个普通的类,没有任何实例方法/变量,这是一样的,这就是你在c++中所做的
其他回答
如果你正在寻找一种将“static”关键字应用到类的方法,就像在c#中一样
静态类只是编译器牵着你的手,阻止你编写任何实例方法/变量。
如果你只是写一个普通的类,没有任何实例方法/变量,这是一样的,这就是你在c++中所做的
与其他托管编程语言不同,“静态类”在c++中没有任何意义。可以使用静态成员函数。
正如这里所指出的,在c++中实现这一点的更好方法可能是使用名称空间。但是因为没有人在这里提到最后一个关键字,所以我在这里发布的是c#中直接等价的静态类在c++ 11或更高版本中的样子:
class BitParser final
{
public:
BitParser() = delete;
static bool GetBitAt(int buffer, int pos);
};
bool BitParser::GetBitAt(int buffer, int pos)
{
// your code
}
我能写类似静态类的东西吗?
不,根据c++ 11 N3337标准草案附件C 7.1.1:
Change: In C ++, the static or extern specifiers can only be applied to names of objects or functions. Using these specifiers with type declarations is illegal in C ++. In C, these specifiers are ignored when used on type declarations. Example: static struct S { // valid C, invalid in C++ int i; }; Rationale: Storage class specifiers don’t have any meaning when associated with a type. In C ++, class members can be declared with the static storage class specifier. Allowing storage class specifiers on type declarations could render the code confusing for users.
和struct一样,class也是一种类型声明。
通过遍历附件A中的语法树也可以得出同样的结论。
有趣的是,静态结构在C语言中是合法的,但没有任何效果:为什么以及何时在C编程中使用静态结构?
名称空间对于实现“静态类”可能不太有用的一种情况是使用这些类实现继承上的组合。名称空间不能是类的友元,因此不能访问类的私有成员。
class Class {
public:
void foo() { Static::bar(*this); }
private:
int member{0};
friend class Static;
};
class Static {
public:
template <typename T>
static void bar(T& t) {
t.member = 1;
}
};