这段代码给了我不完整的类型错误.问题是什么?一个类不允许拥有自己的静态成员实例吗?有没有办法达到同样的效果?
struct Size
{
const unsigned int width;
const unsigned int height;
static constexpr Size big = { 480, 240 };
static constexpr Size small = { 210, 170 };
private:
Size( ) = default;
};
Run Code Online (Sandbox Code Playgroud) 如果我有一个标准的ASP.NET应用程序,那么使对象静态而不是将对象实例置于Application状态之间有什么区别吗?
根据我的理解,这两个对象都存在于应用程序域的ONCE.
其次,对于ASP.NET站点,如果在引用的dll中有静态对象会发生什么.它也是app域的一部分,所以它总是存在一次?
我想知道是否存在初始化静态向量的"更好"方式而不是下面的方法?
class Foo
{
static std::vector<int> MyVector;
Foo()
{
if (MyVector.empty())
{
MyVector.push_back(4);
MyVector.push_back(17);
MyVector.push_back(20);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例代码:)
push_back()中的值是独立声明的; 不是数组或其他东西.
编辑:如果不可能,告诉我也:)
我试图理解这意味着什么,我正在看的代码
在.h
typedef void (*MCB)();
static MCB m_process;
Run Code Online (Sandbox Code Playgroud)
在.C
MCB Modes::m_process = NULL;
Run Code Online (Sandbox Code Playgroud)
有时当我做的时候
m_process();
Run Code Online (Sandbox Code Playgroud)
我得到了分段错误,这可能是因为内存被释放了,我怎样才能在它被释放时进行调试?
我希望我的问题很清楚.
我在我的类中使用私有静态最终LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false.如何使用mockito或jMockit模拟静态final字段
我的班级是:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Class1 {
private static final Logger LOGGER = LoggerFactory.getLogger(Class1.class);
public boolean demoMethod() {
System.out.println("Demo started");
if (LOGGER.isInfoEnabled()) {
System.out.println("@@@@@@@@@@@@@@ ------- info is enabled");
} else {
System.out.println("info is disabled");
}
return LOGGER.isInfoEnabled();
}
}
Run Code Online (Sandbox Code Playgroud)
它的junit是:
import mockit.Mocked;
import mockit.NonStrictExpectations;
import org.mockito.InjectMocks;
import org.mockito.MockitoAnnotations;
import org.slf4j.Logger;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import com.source.Class1;
public class MyTest {
@InjectMocks
Class1 cls1;
@BeforeMethod
public void initMocks() { …Run Code Online (Sandbox Code Playgroud) 对于静态成员初始化,我使用嵌套的帮助器结构,它适用于非模板化的类.但是,如果封闭类由模板参数化,则如果未在主代码中访问辅助对象,则不会实例化嵌套初始化类.为了说明,一个简化的例子(在我的例子中,我需要初始化一个向量).
#include <string>
#include <iostream>
struct A
{
struct InitHelper
{
InitHelper()
{
A::mA = "Hello, I'm A.";
}
};
static std::string mA;
static InitHelper mInit;
static const std::string& getA(){ return mA; }
};
std::string A::mA;
A::InitHelper A::mInit;
template<class T>
struct B
{
struct InitHelper
{
InitHelper()
{
B<T>::mB = "Hello, I'm B."; // [3]
}
};
static std::string mB;
static InitHelper mInit;
static const std::string& getB() { return mB; }
static InitHelper& getHelper(){ return mInit; }
};
template<class T> …Run Code Online (Sandbox Code Playgroud) 给定是一个具有静态成员的类.
class BaseClass
{
public:
static std::string bstring;
};
Run Code Online (Sandbox Code Playgroud)
字符串显然是在类之外进行默认初始化.
std::string BaseClass::bstring {"."};
Run Code Online (Sandbox Code Playgroud)
如果我在标题中包含上面的行以及类,我会收到symbol multiply defined错误.它必须在单独的cpp文件中定义,即使使用include guards或pragma once.
有没有办法在标题中定义它?
我做了一个小实验:
public abstract class MyClass
{
private static int myInt = 0;
public static int Foo()
{
return myInt;
}
public static int Foo(int n)
{
myInt = n;
return bar();
}
private static int bar()
{
return myInt;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我跑了:
MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(3).ToString());
MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(10).ToString());
MessageBox.Show(MyClass.Foo().ToString());
Run Code Online (Sandbox Code Playgroud)
我预期的结果是0,3,0,10,0.
令我惊讶的是,我得到了0,3,3,10,10.
这些变化持续多久了?程序执行的持续时间?调用静态方法的函数的持续时间?
最近发生了以下(样本)枚举......
enum Color
{
Red,
Green,
Yellow,
Blue
}
Run Code Online (Sandbox Code Playgroud)
......可以用看似更加类型安全的类替换:
class Color
{
private Color() { }
public static readonly Color Red = new Color();
public static readonly Color Green = new Color();
public static readonly Color Yellow = new Color();
public static readonly Color Blue = new Color();
}
Run Code Online (Sandbox Code Playgroud)
对于"类型安全",我的意思是如果Color是枚举,则以下语句将起作用,但如果Color是上述类则不行:
var nonsenseColor = (Color)17; // works if Color is an enum
Run Code Online (Sandbox Code Playgroud)
1)这种模式是否有广泛接受的名称(用类型安全类替换枚举)?
2)在哪种情况下应该使用枚举,什么时候更合适?
当我们序列化对象时,静态成员不是序列化的,但是如果我们需要这样做,有什么办法吗?