小编Rob*_*b N的帖子

C++ pimpl成语浪费了一个指令与C风格?

(是的,我知道一台机器指令通常无关紧要.我问这个问题是因为我想了解pimpl习语,并以最好的方式使用它;而且因为有时我会关心一台机器指令.)

在下面的示例代码中,有两个类,ThingOtherThing.用户将包括"thing.hh". Thing使用pimpl成语来隐藏它的实现. OtherThing使用C样式 - 返回并获取指针的非成员函数.这种风格产生稍好的机器代码.我想知道:有没有办法使用C++风格 - 即,使函数成为成员函数 - 但仍然保存机器指令.我喜欢这种风格,因为它不会污染类外的命名空间.

注意:我只关注调用成员函数(在本例中calc).我不是在看对象分配.

下面是我的Mac上的文件,命令和机器代码.

thing.hh:

class ThingImpl;
class Thing
{
    ThingImpl *impl;
public:
    Thing();
    int calc();
};

class OtherThing;    
OtherThing *make_other();
int calc(OtherThing *);
Run Code Online (Sandbox Code Playgroud)

thing.cc:

#include "thing.hh"

struct ThingImpl
{
    int x;
};

Thing::Thing()
{
    impl = new ThingImpl;
    impl->x = 5;
}

int Thing::calc()
{
    return impl->x + 1;
}

struct OtherThing
{
    int x;
};

OtherThing *make_other()
{
    OtherThing *t …
Run Code Online (Sandbox Code Playgroud)

c++ optimization pimpl-idiom

6
推荐指数
2
解决办法
1763
查看次数

多个JVM进程可以共享公共类的内存吗?

我想在我的Web服务器上运行多个Java进程,每个Web应用程序一个.我正在使用一个Web框架(Play),它有很多支持类和jar文件,Java进程使用大量内存.One Play过程显示大约225MB的"驻留私人"内存.(我在Mac OS X上使用Java 1.7.0_05进行测试.)特定于应用程序的代码可能只有几MB.我知道典型的Java Web应用程序是添加到一个服务器进程(Tomcat等)的jar,但似乎运行Play的标准方法是作为独立的应用程序/进程.如果这些是C程序,那么200MB中的大多数将是共享库,而不是在每个应用程序中重复.有没有办法在Java中实现这一点?我看到一些关于类数据共享的页面,但这似乎只适用于核心运行时类.

java memory jvm shared-libraries

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

为什么Ruby全局字符串,比如$&,忽略了没有错误的突变?

我正在学习Ruby(2.0),这让我感到惊讶:

s = "1234"
s =~ /\d+/
$&  ==> "1234"       # as expected, $& contains the matched string
$&.slice!(-2..-1)    # should mutate string
$&  ==> "1234"       # what?
s.slice(-2..-1) 
s  ==> "12"          # as expected
Run Code Online (Sandbox Code Playgroud)

slice!方法应该改变字符串.其他mutator方法的行为方式相同.我的问题:为什么这不会引发错误,这是我所期望的,当一个函数无法完成它所说的那样的事情时?这是在某处记录的吗?有理由吗?

更新

所以,我认为这$&不是一个全局变量.每次引用都会给出一个新对象,就好像它实际上是一个无参数函数:

irb> $foo = "1234"
=> "1234"
irb> $foo.object_id
=> 70205012205980
irb> $foo.object_id
=> 70205012205980   # the same
irb> $&.object_id
=> 70205003531300
irb> $&.object_id   
=> 70205011619040   # different object
Run Code Online (Sandbox Code Playgroud)

所以......我的问题变成了:这只是解释器中的"魔术",或者$&实际上是一个无法使用的函数,正如我在Ruby中定义的那样def ... end?而且,我怎么能分辨出来呢?在Python中,我可以foo通过使用它的名称来引用一个函数:

>>> …
Run Code Online (Sandbox Code Playgroud)

ruby pseudo-globals

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

CFBundleVersion 是否可以包含字母,如果可以,如何比较它们?

根据 Apple 文档,“Build”编号(又名CFBundleVersion)应该是“两个周期分隔的正整数列表,如 1.2.3 中所示”。(来源:App Distribution Guide,部分:设置版本号和构建字符串)(另一个来源:Info.plist 参考,部分 CFBundleVersion

但是,许多已发布的应用程序都有带有字母的内部版本号,例如,我的 Xcode 版本是“6D570”。

Apple 文档还表示,您提交到 App Store 的每个二进制文件的内部版本号都必须增加。

所以我的问题是:可以CFBundleVersion有信件吗?如果是,这在哪里记录,以及如何比较字符串?

versioning ios

6
推荐指数
0
解决办法
604
查看次数

Xcode构建设置"Build Products Path"(CONFIGURATION_BUILD_DIR)是骗人的?

如果我创建一个新的应用程序项目,构建设置看起来像这样:

在此输入图像描述

它声称正在使用构建目录build/Debug-iphoneos.我假设这是相对于项目目录?实际上,项目被编译到"派生数据"目录下~/Library/Developer/Xcode/DerivedData/CryptoTest2-abc...

那么这里发生了什么?这个构建设置是否被忽略了?什么是控制输出目录的构建设置?

xcode build-settings ios

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

HTML弹性框布局 - 滚动元素不会拉伸

我正在尝试创建一个看起来像这样的布局:

在此输入图像描述

页眉和页脚固定在窗口上的位置,如果需要空间,蓝色区域会垂直滚动.

我以为display:flex会这样做,下面的代码接近,但是有一个问题.如果您滚动该内容区域,它看起来像这样:

在此输入图像描述

似乎"左导航"和"内容"的div被切割到其父级的高度,即使该父级是可滚动的.

var linesToAdd = 100;
var html = "";
for (var i=0; i<linesToAdd; i++) {
   html += i + "<br/>"
}
document.getElementById('content').innerHTML = html;
Run Code Online (Sandbox Code Playgroud)
html {
  height: 100%;
}
body {
  margin: 0;
  display: flex;
  flex-direction: column;
  height:100%
}
#header, #footer {
  background: #ffa0a0;
  flex-shrink:0;
}
#mid {
  flex-grow: 1;
  background: #a08080;
  overflow-y: scroll;
  display: flex;
}
#leftnav {
  padding: 10px;
  background: #8a8;
}
#content {
  background: #88a;
  padding: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<!doctype html>
<html>
<body> …
Run Code Online (Sandbox Code Playgroud)

html css flexbox

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

UITextFields中联系信息的快捷方式或自动填充

当我在iOS中使用Safari时,我点击了一个需要输入名称和地址的表单,我在键盘区域中获得了快捷方式.例如,当焦点位于名字字段时,这是键盘.我可以点击"罗伯特"而不是输入名字.

在此输入图像描述

类似的事情发生在姓氏,电话,电子邮件,邮政编码的字段中.

我可以在原生iOS应用程序中获得类似的东西UITextField吗?有没有办法标记一个字段,以便键盘将提供这些快捷方式的建议?

uitextfield ios ios10

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

Visual Studio Code 在多行上对齐函数参数

如果 Javascript(或 Typescript)函数签名具有多行参数(在 Typescript 中很容易发生,类型名称较长),则 Visual Studio Code 在我点击后会像这样缩进return

在此输入图像描述

我更喜欢它排列论据,如下所示:

在此输入图像描述 在此输入图像描述

是否有某个设置可以自动执行此操作,这样我就不必手动缩进代码?

(我也想对函数调用执行此操作。)

javascript code-formatting indentation auto-indent visual-studio-code

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

如何在 SwiftUI、macOS 中打开另一个窗口?

我想在 macOS 上的 SwiftUI 应用程序中显示具有不同内容的第二个窗口。我找不到任何关于此的文档。下面的尝试不起作用。有谁知道怎么做?

class AppState: ObservableObject {
    @Published var showSecondWindow: Bool = false
}

@main
struct MultipleWindowsApp: App {
    @StateObject var appState = AppState()
    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(appState)
        }
        WindowGroup {
            if appState.showSecondWindow {
                SecondContent()
            }
        }
    }
}

struct ContentView: View {
    @EnvironmentObject var appState: AppState
    var body: some View {
        VStack {
            Text("Hello, world!")
            Button("Open 2nd Window") {
                appState.showSecondWindow = true
            }
        }.padding()
    }
}

struct SecondContent: View {
    var body: some …
Run Code Online (Sandbox Code Playgroud)

macos swiftui

6
推荐指数
3
解决办法
1381
查看次数

如何使 ConstraintLayout 中的 View 填充可用高度?

我是 Android 开发新手。我创建了一个具有两个视图的活动/布局。第一个是自定义按钮,我希望其高度为 50dp。第二个是列表视图,我想获取其下方屏幕的其余部分。

在此输入图像描述

我的问题是,当我将它们彼此约束时,它们ListView会被压缩为 0,并且 50dp 按钮周围的“弹簧”会膨胀以占据所有空间。在这里,我给列表的高度为 200dp,以便您可以看到它。如果我将其设置为“匹配约束”,它将变为 0。列表中有内容。

在此输入图像描述

由于 iOS 的限制,我知道如何做到这一点。按钮周围的约束的行为类似于 iOS 中的“大于或等于”约束。我希望他们“平等”。在 Android 中如何做到这一点?

这是 XML。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constrainedHeight="false"
    tools:context=".WorkoutActivity">

    <mycompany.PlayPauseButton
        android:id="@+id/play_pause_button"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/workout_list"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/workout_list"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

android android-constraintlayout

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