我刚刚学会了friend class
C++中的概念(我已经搜索了一下,但这个答案让我笑到我记得最重要的部分),而我正试图把它融入项目中我是现在正在努力.这个简明的问题最终被挑出来了,但总的来说,我对我工作代码中完全缺乏前向声明感到困惑.
我的所有类都通过(子)文件夹分隔,每个文件夹分别放在一个单独的.h和.cpp文件中,但这应该足以让人产生依赖关系:
// FE.h - no implementations - no .cpp file
class FE
{
private:
virtual void somePrivateFunc() = 0;
// 90% virtual class, interface for further implementations
friend class TLS;
};
// DummyFE.h
#include "FE.h"
class DummyFE :: public FE {
/* singleton dummy */
private:
// constructor
public:
static DummyFE& instance();
};
// DummyFE.cpp
#include "DummyFE.h"
// all Dummy FE implementation
// ImplFE.h
#include "FE.h"
class ImplFE …
Run Code Online (Sandbox Code Playgroud) 我在我的Delphi应用程序中有一个类,我想要一种简单而动态的方法将所有字符串属性重置为'',并将所有布尔属性重置为False就我在网上看到的那样,应该可以创建一个循环某种形式,但如何做到这一点对我来说并不清楚.
如果我有一个不需要在.hpp文件中完整定义的类,我通常主要使用前向声明
例)
//B.hpp
namespace A_file {
class A;
}
namespace B_file {
class B {
public:
B();
private:
A *ptr_to_A;
}
}
//B.cpp
#include "A.hpp"
using namespace A_file;
namespace B_file {
B(int value_) {
*ptr_to_A = new A(value_);
}
int some_func() {
ptr_to_A->some_func_in_A();
}
}
Run Code Online (Sandbox Code Playgroud)
我写这种代码.我想,它将再次包括整个hpp.(随意评论,如果你的事情,这是不健康的)
有没有办法可以对std命名空间中的对象/类做同样的事情?如果有办法,可以,还是有副作用?
我在其中一个类中定义了类引用:
Class _objectClass;
if([self.objectClass isSubclassOfClass:[NSManagedObject class]])
{
//does not get called
}
Run Code Online (Sandbox Code Playgroud)
我该如何检查Class
我正在处理什么?
更新:抱歉自动完成没有告诉我isKindOfClass:可用.我现在正在测试
如何在此代码示例中从"child"访问"myvar":
class Parent():
def __init__(self):
self.myvar = 1
class Child(Parent):
def __init__(self):
Parent.__init__(self)
# this won't work
Parent.myvar
child = Child()
Run Code Online (Sandbox Code Playgroud) 我想创建一个不同类实例的arraylist.如何在不定义类类型的情况下创建列表?(<Employee>)
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());
Employee employee = employees.get(0);
Run Code Online (Sandbox Code Playgroud) 如果我使用了文档中的示例,
class SomeActivity : AppCompatActivity() {
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
}
Run Code Online (Sandbox Code Playgroud)
它没有编译,错误:
Cannot access '<init>', it is private in 'Expr'.
Run Code Online (Sandbox Code Playgroud)
但是,将它移到封闭类之外会使其编译:
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
class SomeActivity : AppCompatActivity() {
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这是预期的行为吗?文档似乎没有提到这一点.
像str
或等的类type
>>> type("pear")
<class 'str'>
>>> type(str)
<class 'type'>
Run Code Online (Sandbox Code Playgroud)
可以在Python中访问:
>>> str
<class 'str'>
>>> type
<class 'type'>
Run Code Online (Sandbox Code Playgroud)
然而,类function
和builtin_function_or_method
不.
>>> def foo(): pass
...
>>> type(foo)
<class 'function'>
>>> type(print)
<class 'builtin_function_or_method'>
Run Code Online (Sandbox Code Playgroud)
它们显示为内置类但尝试访问它们会引发名称错误:
>>> function
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
>>> builtin_function_or_method
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'builtin_function_or_method' is not defined
Run Code Online (Sandbox Code Playgroud)
有什么特别的function …
我在一次模拟采访中遇到了一个问题,我必须找到一个二进制树在一个给定节点已经着火后完全烧毁多久.
"从一个叶子节点开始刻录二进制树.从一个节点到另一个节点刻录的时间是多少?整个树被烧毁的时间是什么?火将从一个节点传播到所有路径. "
假设你有一棵这样的树,其中N是着火的节点.这发生在第一秒,其中秒是s,所以在第0秒:
1
/ \
1 1
/ \ \
1 1 1
/ \ \
1 N 1
\
1
Run Code Online (Sandbox Code Playgroud)
经过一秒钟后,将使用更多刻录的节点更新树.下一秒(s + 1)的示例将如下所示:
1
/ \
1 1
/ \ \
1 N 1
/ \ \
1 N 1
\
1
Run Code Online (Sandbox Code Playgroud)
下一秒(s + 2)的示例将是这样的:
1
/ \
N 1
/ \ \
1 N 1
/ \ \
N N 1
\
1
Run Code Online (Sandbox Code Playgroud)
现在在第三秒(s + 3)将是这样的:
N
/ \
N 1
/ \ \
N N …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Java程序中检索任何类(如果可用)的源代码以进行调试.假设我有Class[_]
我想要检索源代码的参考.
我到目前为止所做的尝试 - 在Scala中:
val clazz = classOf[ClassDefinedInSeparateFile]
clazz.getProtectionDomain.getCodeSource.getLocation.toString + "/" +
clazz.getPackage.getName.replaceAll("\\.","/") + "/" + clazz.getSimpleName + ".scala"
- 看起来没问题,JAR在那里并包含.scala
文件,但无法打开使用Source.fromFile(...)
."/" + clazz.getPackage.getName.replaceAll("\\.","/") + "/" + clazz.getSimpleName + ".scala"
- 看起来不错,但无法打开使用 Source.fromInputStream(...)
备注:
.java
或.scala
文件,因此不需要反编译器.(至少对于应用程序的源代码,而不是依赖项.如果应用程序源代码可以访问代码段,那就足够了 - 大多数异常都会在应用程序级别捕获并在那里相关.)谢谢.