标签: static-members

如何初始化std :: map一次,以便它可以被类的所有对象使用?

我有一个枚举StackIndex定义如下:

typedef enum 
{
    DECK,
    HAND,
    CASCADE1,
    ...
    NO_SUCH_STACK
} StackIndex;
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为的类MoveSequence,它是std::deque表单中一堆元组的包装器<StackIndex, StackIndex>.

class MoveSequence
{
    public:
        void AddMove( const tpl_move & move ){ _m_deque.push_back( move ); }
        void Print();
    protected:
    deque<tpl_move> _m_deque;
};
Run Code Online (Sandbox Code Playgroud)

我以为我可以创建一个类的静态std::map成员MoveSequence,它将a转换StackIndex为a std::string,供Print()函数使用.但是当我尝试时,我收到了错误:

"error C2864: 'MoveSequence::m' : only static const integral data members can be initialized within a class"
Run Code Online (Sandbox Code Playgroud)

如果不能将std :: map创建为静态成员,是否有另一种方法可以创建std :: map,将a StackIndex转换为std::string可用于打印MoveSequence对象的a?

谢谢

Beeband.

c++ stdmap static-members

0
推荐指数
1
解决办法
2337
查看次数

多个线程之间的可变静态变量

我正在学习Java中的线程,以及所有概念和关键字.我刚刚学会了这个volatile关键字,它在我脑海中为我正在研究的项目提出了一些有趣的问题.假设我有一个Connector用这样的字段调用的类:

    public static String DEFAULT_CONNECTION_TYPE = "UDP";
Run Code Online (Sandbox Code Playgroud)

假设我将Connector在多个线程上创建大量对象,但每个线程将使用不同的连接方法(如"TCP").在将使用其他连接类型的线程上,如果我不想为每个对象显式声明它,是否有办法更改DEFAULT_CONNECTION_TYPE每个线程?是否有一个关键字将使一个变量线程本地,但仍然是该线程的静态?这甚至有意义吗?

java multithreading static-members

0
推荐指数
1
解决办法
2878
查看次数

静态变量的生命周期

有没有办法设置静态变量的生命周期 - 即:在重置之前它保持活动多长时间?我希望可能有一个属性可以应用.

.net c# asp.net wpf static-members

0
推荐指数
1
解决办法
5550
查看次数

私有静态成员和继承

所以我正在使用包含一些Web服务的单例类.对服务的引用存储为私有静态只读成员.我希望有一个非常相似的类,它使用相同的接口包装不同的Web服务.如果我从第一个类继承并覆盖私有静态只读成员与新的成员将一切顺利,我认为?是否所有继承的函数(一些是公共的,一些是私有的,一些是静态的)都使用新的引用?

我问,因为我之前遇到了一些继承静态成员的怪癖.

c# oop inheritance static-members

0
推荐指数
1
解决办法
98
查看次数

java字节码是不是按顺序执行?

我期望下面的代码在设置静态变量值的语句之前打印行,但它没有按预期工作.

import java.io.PrintWriter;
class Bank{
private static boolean isInCrisis = false;
public static boolean getIsInCrisis(){return Bank.isInCrisis;}
public static boolean setIsInCrisis(boolean crisis){
    return Bank.isInCrisis = crisis; 
}
public String getCash() throws Exception{
    if(!Bank.isInCrisis){
        return new String("$100"); 
    }
    else{
        throw new Exception("Bank is in crisis"); 
    }
}
}

public class InstanceObjects{
public static void main(String... st) {
    try{
        Bank hsbc = new Bank();
        PrintWriter writer = new PrintWriter(System.out);
        writer.printf("collect cash: %s\n",hsbc.getCash());
        writer.printf("collect cash: %s\n",hsbc.getCash());
        writer.printf("collect cash: %s\n",hsbc.getCash());
        writer.printf("collect cash: %s\n",hsbc.getCash());
        writer.printf("collect cash: …
Run Code Online (Sandbox Code Playgroud)

java static-members

0
推荐指数
1
解决办法
86
查看次数

如何向现有类添加新的静态方法?

我已经搜索并阅读了MSDN,但我只发现了如何将一个实例方法添加到现有的类中.

现在,我想向现有类添加一个静态方法,如下所示:

String.myStaticMethod(....);
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?这是不允许在c#中?

c# class static-members

0
推荐指数
1
解决办法
282
查看次数

C++中指向self的成员变量指针

当我尝试编译此代码时,为什么g ++报告错误?

class A {
  private:
    static A* Aptr[5];
  public:
    static int A_count;
    A() {
        Aptr[A_count] = this;
    }
};

int A::A_count = 0;

int main() {
    A a_;
    A b_;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

/tmp/ccrp4BGg.o: In function `A::A()':
try.cpp:(.text._ZN1AC2Ev[_ZN1AC5Ev]+0x18): undefined reference to `A::Aptr'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

c++ static-members

0
推荐指数
1
解决办法
1079
查看次数

C++:静态指针、静态对象和动态内存分配

考虑以下代码段:

#include <iostream>
using namespace std;

class p
{
    public:
    int* q;
    p()
    {
        q = new int(100);
    }
    ~p(){
        delete q;
    }
};

static p* p1 = new p();
static p p2;

int main() {
    // your code goes here
    std::cout << *(p1->q);
    std::cout << *(p2.q);

    delete p1;
}
Run Code Online (Sandbox Code Playgroud)

p1 和 p2 是静态变量,它们必须存储在静态段中。

  1. 由于 p1 是一个指针,那么是否只是存储在静态段中的指针地址,甚至是它指向的对象?

  2. p2 是一个普通的静态对象,但是它包含一个动态分配的成员变量 q,那么 q 是否也存储在静态段中?

c++ pointers static-members dynamic-memory-allocation

0
推荐指数
1
解决办法
4520
查看次数

cpp:'.' 之前的预期主要表达式 令牌

我有以下代码:

class SSLHashSHA1
{
    SSLHashSHA1();
    ~SSLHashSHA1();
    public:
        static OSStatus update(string*, int*);
        static OSStatus final (string*, string*);
};

OSStatus SSLHashSHA1::update(string* ctx, int* ran){
    return 0;
}

OSStatus SSLHashSHA1::final(string* ctx, string* out){
    return 0;
}

static OSStatus SSLVerifySignedServerKeyExchange(
    SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signature, uint16_t signatureLen)
{
    OSStatus err;

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
        goto fail;
    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
        goto fail;
        goto fail;
    if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
        goto fail;


    fail:
        SSLFreeBuffer(&signedHashes); …
Run Code Online (Sandbox Code Playgroud)

c++ static class static-members

0
推荐指数
1
解决办法
1014
查看次数

静态成员声明c ++ 11

我创建了一个带有静态字段的基本IBasic接口

class IBasic
{
public:
    IBasic();
    virtual ~IBasic();

    static std::vector< std::vector<char> > Field;
};
Run Code Online (Sandbox Code Playgroud)

从哪个继承类继承:

class Inherit : public IBasic
{
public:
    Inherit(int);
    ~Inherit();
    void Foo();
};
Run Code Online (Sandbox Code Playgroud)

Inherit类使用构造函数/或成员函数中的Field静态成员进行一些操作.为了创建Inherit类的实例,我们需要在main函数之前在main.cpp中显式声明一个静态字段:

#include "Basic.h"
#include "Inherit.h"

std::vector< std::vector<char> > IBasic::Field;

int main()
{
    Inherit(10);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 静态方法实际存在于什么名称空间中(全局?)?因为我知道静态字段/函数实际上不是类成员.
  2. 是否有另一种方法来声明这个静态方法,例如,在类文件中,在main函数内,还是通过创建未命名的命名空间?它只是一个正确的变体吗?
  3. 怎么样对吗?首先应该考虑什么?

c++ inheritance static-members c++11

0
推荐指数
1
解决办法
153
查看次数