无论如何在C++中创建类之前声明一个类的对象?我问,因为我试图使用两个类,第一个需要在其中包含第二个类的实例,但第二个类还包含第一个类的实例.我意识到你可能认为我可能进入一个无限循环,但我实际上需要在第一个类之前创建第二个类的实例.
C#中非常基本的问题,
class Data<T>
{
T obj;
public Data()
{
// Allocate to obj from T here
// Some Activator.CreateInstance() method ?
obj = ???
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
是否可以使用Python代码创建局部变量,只给出变量的名称(字符串),以便后续调用locals()中的"'xxx'"将返回True?
这是一个视觉:
>>> 'iWantAVariableWithThisName' in locals()
False
>>> junkVar = 'iWantAVariableWithThisName'
>>> (...some magical code...)
>>> 'iWantAVariableWithThisName' in locals()
True
Run Code Online (Sandbox Code Playgroud)
出于什么目的,我需要这个技巧完全是另一个话题......
谢谢您的帮助.
我可以在ObjC中从string中实例化类.例如,我通过子类化UITableViewCell定义了新的DBCell类,并使用这些代码从name实例化类:
DBCell *cell=[tableView dequeueReusableCellWithIdentifier:cellClassname];
if (cell==nil) {
Class cellClass=NSClassFromString(cellClassname);
cell=[cellClass alloc];
cell=[cell initWithStyle:cellStyle reuseIdentifier:cellClassname];
}
Run Code Online (Sandbox Code Playgroud)
现在我需要将代码迁移到Swift,我在Swift中重新定义了DBCell类:
class DBCell: UITableViewCell {
var label:String?
var key:String?
var managedObject:NSManagedObject?
var delegate:AnyObject?
convenience override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
self.init(style: style, reuseIdentifier: reuseIdentifier)
self.textLabel.font=UIFont.preferredFontForTextStyle(UIFontTextStyleCaption1)
self.backgroundColor=UIColor.blackColor()
self.textLabel.backgroundColor=UIColor.blackColor()
}
}
Run Code Online (Sandbox Code Playgroud)
但是我如何实例化类并调用相应的init函数?
我遇到了我认为是PHP应用程序的循环依赖问题.如果这不正确,请告诉我.情况如下:
两个类,LogManager和DBSession.
DBSession用于与数据库交互,LogManager用于记录文件.两者都广泛用于我的应用程序中.创建DBSession实例时,必须通过构造函数参数为其提供LogManager实例.这是因为DBSession有时会将信息记录到文件中,并将使用LogManager实例执行此操作.
现在,我想扩展LogManager,以便它也可以登录到数据库表,而不是文本文件.当然,我倾向于重复使用现有的课程,但我很快意识到这带来了一个有趣的情况.
DBSession已经需要一个LogManager实例来构造.如果我想在LogManager中重用DBSession类,它现在需要一个DBSession实例.我怎样才能满足这两个要求?显然,我的方法必定是错误的.
你怎么建议我解决这个问题?
先谢谢你,伙计们.
我已经看过关于这个主题的几个问题,但我还没有找到明确的答案.
我想知道在新的Python代码库中使用旧式类的正确方法.比方说,例如,我有两个固定类,一个和乙.如果我想要子类A和B,并转换为新式类(A2和B2),这是有效的.但是,如果我想从A2和B2创建新的C类,则会出现问题.
因此,是否可以继续使用此方法,或者如果任何基类被定义为旧式,那么所有类都必须符合旧式吗?
请参阅示例代码以获得说明:
class A:
def __init__(self):
print 'class A'
class B:
def __init__(self):
print 'class B'
class A2(A,object):
def __init__(self):
super(A2, self).__init__()
print 'class A2'
class B2(B,object):
def __init__(self):
super(B2, self).__init__()
print 'class B2'
class C(A2, B2):
def __init__(self):
super(C,self).__init__()
print 'class C'
A2()
print '---'
B2()
print '---'
C()
Run Code Online (Sandbox Code Playgroud)
这段代码的输出:
class A
class A2
---
class B
class B2 …Run Code Online (Sandbox Code Playgroud) 我必须动态创建一个类,但我想使用类构造函数传递参数.
目前我的代码看起来像
Class<HsaInterface> _tempClass = (Class<HsaInterface>) Class.forName(hsaClass);
_tempClass.getDeclaredConstructor(String.class);
HsaInterface hsaAdapter = _tempClass.newInstance();
hsaAdapter.executeRequestTxn(txnData);
Run Code Online (Sandbox Code Playgroud)
如何用参数调用构造函数?
假设对于每个域实体,我都有一个为数据映射器提供API的存储库.例如,如果我有一个UserEntity,那么我会有一个UserRepository与UserMapper说话,以便在数据库中保存用户数据.
现在,假设一个表单在网页上提交,我的控制器知道它需要根据提交的信息创建一个新的UserEntity.
可以:
在那里做新的UserEntity(),并根据提交的表单数据运行所有必要的setter方法,然后将UserEntity传递给repo,后者将传递给mapper进行插入?
控制器创建UserEntity => Repo => Mapper => DB
将表单数据转换为数组,并将其传递给UserRepository,然后UserRepository运行新的UserEntity()和setter,并将其传递给mapper进行插入?
控制器传递用户数据=> Repo创建UserEntity => Mapper => DB
将数组传递给UserRepository,UserRepository将数组传递给映射器以获取新的UserEntity和插入?
控制器传递用户数据=> Repo传递用户数据=> Mapper创建UserEntity => DB
谁负责管理对象的创建?
我正在尝试在我的应用程序中实现导航抽屉,但我遇到了严重问题.现在我的问题是我想将我的MainContent放在抽象布局中,如下所示:
<android.support.v4.widget.DrawerLayout
android:id = "@+id/drawer_layout"
xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
>
<FrameLayout
[...]
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误代码
无法实例化以下类: - android.support.v4.widget.DrawerLayout(Open Class,Show Exception)
这些是例外细节:
java.lang.ClassNotFoundException: android.support.v4.widget.DrawerLayoutImpl
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:148)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:195)
at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:191)
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:152)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.android.tools.idea.rendering.RenderClassLoader.loadClassFromJar(RenderClassLoader.java:78)
at org.jetbrains.android.uipreview.ProjectClassLoader.loadClassFromModuleOrDependency(ProjectClassLoader.java:108)
at org.jetbrains.android.uipreview.ProjectClassLoader.load(ProjectClassLoader.java:89)
at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:56)
at org.jetbrains.android.uipreview.ProjectClassLoader.findClass(ProjectClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:173)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:96)
at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:172)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:132)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
at …Run Code Online (Sandbox Code Playgroud) 我正在探索将常量表达式与C ++中的模板结合使用的过程,但遇到了一个我无法理解的问题。
我想检查模板参数的值(在我的情况下为unsigned int)是否为零,但是即使我有一个static_assert确认它已经实际传递到零以下,编译器也从未认为该值为零。
我正在实现一个简单的(或至少我这么认为)模板函数,该函数应该只汇总从5到零的范围内的所有整数值。
它应该对模板函数执行递归调用,直到达到零为止,然后应该停止,但是编译器从不认为模板参数值为零。
这是我有问题的功能:
template <unsigned int Value>
constexpr unsigned int sumAllValues()
{
static_assert (Value >= 0, "Value is less than zero!");
return Value == 0 ? 0 : Value + sumAllValues<Value - 1>();
}
Run Code Online (Sandbox Code Playgroud)
它的调用方式如下:
constexpr unsigned int sumVals = sumAllValues<5>();
Run Code Online (Sandbox Code Playgroud)
由于某种原因,编译器从不认为Value == 0,因此它会一直持续到在static_assert上停止为止。如果删除断言,则编译器将继续执行直到达到最大实例化深度:
错误:模板实例化深度超过最大值900(使用-ftemplate-depth =增加最大值)返回值== 0?0:值+ sumAllValues();
我在上述功能中做错了什么?我不能检查模板参数本身的值吗?
我在Wikipedia上发现的一个例子启发了我:
template<int B, int N>
struct Pow
{
// recursive call and recombination.
enum{ value = B*Pow<B, N-1>::value };
};
template< int B >
struct Pow<B, 0> …Run Code Online (Sandbox Code Playgroud)