我正在使用第三方API来覆盖C运行时库中的内存管理功能.为了使一切正常工作,我必须在进行任何内存分配之前调用初始化API.
我正在处理的项目使用静态Factory对象,该对象在执行主文件中的任何代码之前动态初始化.
如何确保在静态Factory对象之前初始化API?
我对构造函数有些怀疑.
有一个类"Foo"可以在三种不同的"状态"中创建,我们称之为"年轻","成人"和"老".
我想强调它们不能被视为不同的类,因为对象将进化,如果它被创建为"YOUNG",它将变为"ADULT"然后"OLD"等等.
我的问题是:我如何定义一个或多个构造函数来使这三种类型变得多样化?
我看到了一些可能性,但没有人是一个"优雅"的解决方案..
1)创建一个以int作为输入的构造函数
public Foo(int i)
{
switch (i)
{
case 0:
.
.
.
case 1:
.
.
.
case 2:
.
.
.
}
}
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它,因为不清楚是否有人看到这个代码.
2)创建一个空白构造函数,然后创建三个不同的方法,如
public Foo()
{
}
public void setYoungFoo()
{
.
.
.
}
public void setAdultFoo()
{
.
.
.
}
public void setOldFoo()
{
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
这可能是解决问题的明确方法,但我会在构造函数中解决此问题.
3)静态变量在这种情况下有用吗?
public static final String "YOUNG";
public static final String "ADULT";
public static final String "OLD"; …Run Code Online (Sandbox Code Playgroud) public class MainMDI extends javax.swing.JFrame {
private static MainMDI thiz;
public MainMDI() {
initComponents();
thiz = this;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建一个MDI应用程序.MainMDI类是应用程序的主类,因此main方法驻留在该类中.上面的代码创建了一个名为thiz的静态变量,该变量在应用程序运行时指向MainMDI类的实例.
我打算使用变量thiz从main方法中访问类MainMDI的非静态(实例)成员.(我无法从main方法中访问非静态成员,因为main方法是类中的静态成员我的应用程序中的MainMDI).
public class MainMDI extends javax.swing.JFrame {
private static MainMDI thiz = this;
public MainMDI() {
initComponents();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试初始化变量thiz时,如上面的代码,编译器说非静态变量,这不能从静态上下文引用.但我不是在静态环境中提到这个,不是吗?这是因为变量this(非静态的)在静态变量初始化时尚未初始化吗?
另外,如果我没有将类MainMDI设置为主类并使用main方法创建另一个类并将该类设置为主类,那么它是一个更好的编程实践吗?
大家好我有一个关于编写在线游戏的问题:我想知道静态字段是仅由类的本地实例共享还是由连接到游戏服务器的所有客户端共享.
谢谢!
What happened in this case,
static Object MAX = 5;
public Object tmp = 0;
public void process() {
tmp = MAX;
}
Run Code Online (Sandbox Code Playgroud)
will tmp also behave like class variable?
我有以下代码
class Demo {
static int a = 0;
static int b = 1;
static {
a = ++b;
}
void gam(int x) {
a = a * x;
b = b * x;
}
}
class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.a++;
d2.a--;
System.out.println(d1.a + " " + d1.b + " " + d2.a + " " + d2.b);
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚为什么d1.a是2.不应该是3吗?从而a=++b使它成为2并d1.a++使其成为3?
class MyClass
{
public:
...
private:
enum class BDTNodeType : unsigned char
{
NT_TERMINAL_ZERO,
NT_TERMINAL_ONE,
NT_TERMINAL_X,
NT_NOT_TERMINAL
};
class BDTNode
{
public:
explicit BDTNode(BDTNodeType node_type = BDTNodeType::NT_NOT_TERMINAL);
BDTNode(const BDTNode &node);
~BDTNode();
BDTNodeType type;
BDTNode *thenPtr; //1
BDTNode *elsePtr; //0
};
BDTNode *root_node;
//Constant nodes
static const BDTNode fv_nodes[3] = {
BDTNode(BDTNodeType::NT_TERMINAL_ZERO),
BDTNode(BDTNodeType::NT_TERMINAL_ONE),
BDTNode(BDTNodeType::NT_TERMINAL_X)
};
};
Run Code Online (Sandbox Code Playgroud)
我想直接在类声明中初始化静态const BDTNode fv_nodes数组,因为C++ 11允许这样做.但我得到"C2864:'MyClass :: fv_nodes':具有类内初始值设定项的静态数据成员必须具有非易失性const积分".我不能在课外初始化它,因为在那种情况下"BDTNode"类将无法访问.那我该怎么做呢?
我想使用成员函数作为回调(使用此函数):
glfwSetCursorPosCallback(window, (GLFWcursorposfun)(MyClass::mouseButtonChanged));
Run Code Online (Sandbox Code Playgroud)
我知道这是不可能的,因为我需要一个MyClass调用该方法的实例mouseButtonChanged.
但是我能做什么?
为什么this在静态成员函数中不允许未评估的上下文?
struct A
{
void f() {}
static void callback(void * self) // passed to C function
{
static_cast< decltype(this) >(self)->f();
}
};
Run Code Online (Sandbox Code Playgroud)
此代码给出错误:
错误:'this'不适用于静态成员函数
Run Code Online (Sandbox Code Playgroud)static_cast< decltype(this) >(self)->f(); ^~~~
decltype(this)为了简洁需要(有时它会短得多VeryVeryLongClassName *),另一个优点是意图更清晰.
标准说什么this在静态成员函数中使用未评估的上下文?
如何在c#中获取类的所有静态成员?我知道我可以访问像class1.member1这样的人,但我正在寻找一种方法来获取所有成员.谢谢