小编lz9*_*z96的帖子

为什么我们不能为继承定义一个匿名类?

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{};),但显然它不是一个完美的解决方案.

  1. 有时我们甚至不需要从宏生成的类中获取任何成员,但该类必须包含成员以提供一些函数(例如,static_assert使用一些帮助器类模板).

  2. 不允许完全专门化嵌套类模板,这使我无法使用嵌套类来避免2)中提到的命名空间冲突.

我知道这现在是非法的,但为什么在C++标准中不允许这样做?

c++ standards

4
推荐指数
2
解决办法
286
查看次数

Keras:加载由多个GPU生成的检查点权重HDF5

检查点摘要:

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)

hdf5 keras tensorflow

3
推荐指数
1
解决办法
3001
查看次数

如何为接口中的属性指定@Throws

我目前正在将一些 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房产吗?

java rmi kotlin

3
推荐指数
1
解决办法
1315
查看次数

成功编译不良程序是否符合标准?

对于一个不正确的C++程序,如:

foo^@#$bar%$
Run Code Online (Sandbox Code Playgroud)

编译器是否符合标准,以产生带有诊断消息的编译二进制文件,而不是像g ++/clang ++那样中断编译?

intro.compliance声明:

如果程序包含违反任何可诊断规则或本标准中描述的构造的发生,如果实现不支持该构造,则符合条件的实现应发出至少一条诊断消息.

在这种情况下不需要编译错误.

可能相关:

c++ language-lawyer

2
推荐指数
1
解决办法
87
查看次数

如何在gradle中创建插件为Kotlin生成适当的项目配置?

我已经配置了我build.gradle的运行gradle testgradle 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)

intellij-idea gradle kotlin

1
推荐指数
1
解决办法
247
查看次数