标签: static-members

获取静态DateTime值的最佳方法

有没有更好的方法在C#中获取静态DateTime值而不是以下?

public static DateTime StartOfRecordedHistory = DateTime.Parse("2004-01-01");
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# static-members

2
推荐指数
2
解决办法
8279
查看次数

静态模板数据成员存储

首先,我会写一些例子来正确解决这个问题.

首先,我将声明用于创建单例对象的模板(不是自动创建的): singleton_base.h

template <class Derived>
class SingletonBase
{
  public:
    static Derived* instance() { assert(s_instance); return dynamic_cast<Derived*>(s_instance); }
  protected:
    SingletonBase() { assert(s_instance==0); s_instance=this; }
    virtual ~SingletonBase() { assert(s_instance); s_instance=0; }
  private:
    static SingletonBase* s_instance;
};

template <class Derived>
SingletonBase<Derived>* SingletonBase<Derived>::s_instance = 0;
Run Code Online (Sandbox Code Playgroud)

现在我们可以声明从模板派生的任何类,并且每个派生类都应该有自己的s_instance.例如:

child1.h

class Child1 : public SingletonBase<Child1>
{
  ...
  void doSomething();
  static void staticInvokeOne();
};
Run Code Online (Sandbox Code Playgroud)

child2.h

class Child2 : public SingletonBase<Child2>
{
  ...
  void doSomethingElse();
  static void staticInvokeBoth();
};
Run Code Online (Sandbox Code Playgroud)

我也分别在child1.cppchild2.cpp中实现了Child的实现.

child1.cpp

void Child1::staticInvokeOne()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ templates static-members

2
推荐指数
1
解决办法
1381
查看次数

隐藏'静态'类变量

所以我最近发现了一些使用特定技术的源代码(成语?)我以前没见过; 简而言之; 它不是使用相关类的静态变量,而是在类源文件中使用局部变量.

myclass.h

class myclass {
    //static int myint;

public:
    myclass();
    ~myclass();
    int count();
};
Run Code Online (Sandbox Code Playgroud)

myclass.cpp

#include "myclass.h"

int myint = 0;

myclass::myclass() {
    myint++;
}
myclass::~myclass() {
    myint--;
}

int myclass::count() {
    return myint;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "myclass.h"
#include <iostream>

int main() {
    myclass aclass;
    myclass theclass;

    std::cout << theclass.count(); //outputs 2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么有人会采用这种方法而不是使用静态变量?

我对它的看法是,理想情况下,变量只能为myclass类(私有静态)所知,并且继承根本不重要(在这种情况下),这可能会阻止其他人知道这个变量.但这是我能看到的唯一优势; 不确定这是否值得保证.

同样的问题适用于私有的(静态/非静态)成员函数; 当继承不重要时.

编辑:读完之后,我要做的是因为有些人仍然使用C编程风格...

c++ static-members static-functions

2
推荐指数
1
解决办法
1202
查看次数

关于静态成员变量的问题

在下面的代码中,我假设成员变量mBar只在第一次构造Foo对象时被实例化......并且该mBar实例化将与所有未来的Foo对象共享,但Bar()不会再次调用构造函数.这准确吗?

public class Foo {
  private static Bar mBar = new Bar();

  public Foo() {

  }
Run Code Online (Sandbox Code Playgroud)

java static static-members

2
推荐指数
1
解决办法
180
查看次数

静态方法和变量

我知道在java中静态方法只能使用静态变量和静态方法,但非静态方法可以使用非静态变量和方法.有没有解释为什么静态方法只能访问静态变量/方法?并且无法访问非静态方法和变量?

java static static-methods static-members

2
推荐指数
1
解决办法
1709
查看次数

为什么我们必须定义一个在类中初始化的const静态成员

我们知道,可以在类结构中初始化整数const静态成员.这在初始化后在类结构中使用常量时很有用.例如,它可以用作int数组的大小.查看以下代码:

class MyClass{
static const int num = 100;
int elems[num];
...
};
Run Code Online (Sandbox Code Playgroud)

但是我们仍然需要在类定义之外定义成员num:

const int MyClass::num;
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我们要这样做.有人能告诉我为什么吗?非常感谢.

另外,我写了以下代码:

#include <iostream>
using namespace std;

class MyClass{
public:
MyClass()
{
    cout << "instruct class MyClass!" << endl;
}
static const int num = 100;
int elems[num];
};

//const int MyClass::num;

int main()
{
MyClass a;
const int *b = &(a.num);
cout << "&(a.num): " << &(a.num) << endl;
cout << "a.num: " << a.num << endl;
cout << "*b: …
Run Code Online (Sandbox Code Playgroud)

c++ initialization object static-members

2
推荐指数
1
解决办法
911
查看次数

在不同的静态方法中使用时,全局变量获得不同的值

我有以下类实现必须使用单个全局数组的静态方法.它定义如下:

//Defined in LockTrack.h file

enum LOCK_ID{
    LOCKID_0,
    LOCKID_1,
    LOCKID_2,

    LOCKID_COUNT
};

static LOCK_ID __glob_lock_ids[LOCKID_COUNT];


class CLockTrack
{
public:
    static void getLockedLocks(/*parameters*/)
    {
        //__glob_lock_ids = points to 0x015ef558 address in memory
        LOCK_ID lockID = __glob_lock_ids[0];
    }

    static void inline setLock(LOCK_ID lockID)
    {
        //__glob_lock_ids = points to 0x015ef330 address in memory
        __glob_lock_ids[lockID] = LOCK_ON_FLAG;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是会发生的是'__glob_lock_ids'指针指向每种方法中的不同内存位置.为什么?以及如何解决这个问题?

c++ static-methods class global-variables static-members

2
推荐指数
1
解决办法
104
查看次数

类中的Python静态字典,支持项目分配

我有一个包含静态字典的类:

class MyClass:
    my_dict = {}
    def __init__(self, name):
        self.name = name
        MyClass.my_dict[self.name] = []
    def __call__(self, data):
        MyClass.my_dict[self.name].append(data)
Run Code Online (Sandbox Code Playgroud)

每当我想要更新字典时,我都必须使用MyClass.my_dict[key],但我希望类本身能够支持项目分配,所以我可以MyClass[key]用来做同样的事情.有没有办法做到这一点?我正在使用Python 2.7.

python dictionary static-members python-2.7

2
推荐指数
1
解决办法
2023
查看次数

c ++,错误:使用qualified-name无效

#include<iostream>
using namespace std;

class sample {
    public:
        static int x;
};

//int sample::x = 20;

int main() {
    sample s1;
    int sample::x = 30;
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个程序然后得到一个错误无效使用限定名称'sample :: x'

我知道我收到此错误是因为这个语句是int sample :: x = 30; 在主要.

但我不明白为什么我不能定义 int sample :: x = 30; 在主?

c++ class static-variables static-members

2
推荐指数
1
解决办法
6121
查看次数

静态类成员与this指针没有关联吗?

举个例子:

SomeClass.h

class Foo {
public:
    static int bar;
    int x;
    void someFunc() {
        this->x = 5;
        this->bar = 9;
    }
};
Run Code Online (Sandbox Code Playgroud)

SomeClass.cpp

int Foo::bar = 0;
Run Code Online (Sandbox Code Playgroud)

mainc.pp

#include <iostream>
#include "SomeClass.h"

int main() {
    Foo f;
    f.someFunc();

    std::cout << "f.x = " << f.x << '\n';
    std::cout << "f.bar = " << f.bar << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio 2017CE编译和构建。

输出量

f.x = 5
f.bar = 9
Run Code Online (Sandbox Code Playgroud)

但是根据cppreference:static

类的静态成员不与该类的对象关联:它们是具有静态或线程(自C ++ 11起)存储持续时间或常规函数的自变量。

现在,对于静态成员函数,它们声明:

静态成员函数不与任何对象关联。调用时,它们没有此指针。

我只想对此有所澄清:我以为静态成员和静态函数成员都没有this与之关联的指针...

c++ this static-members this-pointer c++17

2
推荐指数
1
解决办法
93
查看次数