class MyClass : SomeFeatureGeneratedByTemplate<MyClass>
Run Code Online (Sandbox Code Playgroud)
通过继承实例化的类模板,模板为我们的类添加功能提供了很多便利.
但是,有时该功能可能变得太复杂而无法通过模板实现,其中宏可能是唯一的选择.
MACRO_TO_GENERATE_COMPLICATED_FEATURE(MyClass)
/* Might be expanded to
#ifndef MYCLASS_FEATURE_CLASS
#define MYCLASS_FEATURE_CLASS
class MyClassFeature { ... };
#endif
*/
class MyClass : MyClassFeature
Run Code Online (Sandbox Code Playgroud)
我想知道以下语法是否会简化这一点:允许在适当的位置定义一个匿名类
class MyClass : class { ... }, class{ ... }
Run Code Online (Sandbox Code Playgroud)
因此,上面的代码可以重写为:
class MyClass : MACRO_GEN_FEATURE(MyClass)
Run Code Online (Sandbox Code Playgroud)
附加:
问:为什么我不把代码嵌入到类中?
答:1.此功能应明确并向用户公开.当他们生成docs时,派生类很容易被发现:class A: FEATURE1(A), FEATURE2(A)而嵌入式宏则不容易发现.虽然可以推导出一个空类来实现我们的目标(例如class A: FEATURE1(A)//just derive predefined struct FEATURE1_EMPTY{};),但显然它不是一个完美的解决方案.
有时我们甚至不需要从宏生成的类中获取任何成员,但该类必须包含成员以提供一些函数(例如,static_assert使用一些帮助器类模板).
不允许完全专门化嵌套类模板,这使我无法使用嵌套类来避免2)中提到的命名空间冲突.
我知道这现在是非法的,但为什么在C++标准中不允许这样做?
检查点摘要:
checkpointer = ModelCheckpoint(filepath=os.path.join(savedir, "mid/weights.{epoch:02d}.hd5"), monitor='val_loss', verbose=1, save_best_only=False, save_weights_only=False)
hist = model.fit_generator(
gen.generate(batch_size = batch_size, nb_classes=nb_classes), samples_per_epoch=593920, nb_epoch=nb_epoch, verbose=1, callbacks=[checkpointer], validation_data = gen.vld_generate(VLD_PATH, batch_size = 64, nb_classes=nb_classes), nb_val_samples=10000
)
Run Code Online (Sandbox Code Playgroud)
我在多GPU主机上训练了模型,该主机mid以HDF5格式转储文件。当我使用将它们加载到一台GPU机器上时keras.load_weights('mid'),出现了一个错误:
Using TensorFlow backend.
Traceback (most recent call last):
File "server.py", line 171, in <module>
model = load_model_and_weights('zhch.yml', '7_weights.52.hd5')
File "server.py", line 16, in load_model_and_weights
model.load_weights(os.path.join('model', weights_name))
File "/home/lz/code/ProjectGo/meta/project/libpolicy-server/.virtualenv/lib/python3.5/site-packages/keras/engine/topology.py", line 2701, in load_weights
self.load_weights_from_hdf5_group(f)
File "/home/lz/code/ProjectGo/meta/project/libpolicy-server/.virtualenv/lib/python3.5/site-packages/keras/engine/topology.py", line 2753, in load_weights_from_hdf5_group
str(len(flattened_layers)) + ' layers.')
ValueError: You are …Run Code Online (Sandbox Code Playgroud) 我目前正在将一些 Java RMI 代码移植到 Kotlin。Java 中的遗留接口是:
interface Foo: Remote {
Bar getBar() throws RemoteException
}
Run Code Online (Sandbox Code Playgroud)
运行自动迁移工具后,该字段bar变为属性:
interface Foo: Remote {
val bar: Bar
}
Run Code Online (Sandbox Code Playgroud)
但是,在迁移后的程序中,getBar不再标记为throws RemoteException,这会导致illegal remote method encounteredRMI 调用出错。
我想知道有什么办法可以标记@Throws房产吗?
对于一个不正确的C++程序,如:
foo^@#$bar%$
Run Code Online (Sandbox Code Playgroud)
编译器是否符合标准,以产生带有诊断消息的编译二进制文件,而不是像g ++/clang ++那样中断编译?
intro.compliance声明:
如果程序包含违反任何可诊断规则或本标准中描述的构造的发生,如果实现不支持该构造,则符合条件的实现应发出至少一条诊断消息.
在这种情况下不需要编译错误.
可能相关:
我已经配置了我build.gradle的运行gradle test和gradle run正确.但是,run/test在导入生成的配置后,IDEA不会显示任何任务gradle idea.看来,这些任务并不包括在ipr/ iws在所有.
这是我的build.gradle:
buildscript {
ext.kotlin_version = '1.2.0'
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
}
}
apply plugin: 'kotlin'
apply plugin: 'org.jetbrains.dokka'
apply plugin: 'application'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: 'idea'
dokka {
outputFormat = 'html'
outputDirectory = "$buildDir/javadoc"
}
sourceSets {
test.kotlin.srcDirs += 'src/test/kotlin'
}
junitPlatform {
enableStandardTestTask true
}
defaultTasks …Run Code Online (Sandbox Code Playgroud)