(是的,我知道一台机器指令通常无关紧要.我问这个问题是因为我想了解pimpl习语,并以最好的方式使用它;而且因为有时我会关心一台机器指令.)
在下面的示例代码中,有两个类,Thing和
OtherThing.用户将包括"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) 我想在我的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中实现这一点?我看到一些关于类数据共享的页面,但这似乎只适用于核心运行时类.
我正在学习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) 根据 Apple 文档,“Build”编号(又名CFBundleVersion)应该是“两个周期分隔的正整数列表,如 1.2.3 中所示”。(来源:App Distribution Guide,部分:设置版本号和构建字符串)(另一个来源:Info.plist 参考,部分 CFBundleVersion)
但是,许多已发布的应用程序都有带有字母的内部版本号,例如,我的 Xcode 版本是“6D570”。
Apple 文档还表示,您提交到 App Store 的每个二进制文件的内部版本号都必须增加。
所以我的问题是:可以CFBundleVersion有信件吗?如果是,这在哪里记录,以及如何比较字符串?
如果我创建一个新的应用程序项目,构建设置看起来像这样:

它声称正在使用构建目录build/Debug-iphoneos.我假设这是相对于项目目录?实际上,项目被编译到"派生数据"目录下~/Library/Developer/Xcode/DerivedData/CryptoTest2-abc...
那么这里发生了什么?这个构建设置是否被忽略了?什么是控制输出目录的构建设置?
我正在尝试创建一个看起来像这样的布局:
页眉和页脚固定在窗口上的位置,如果需要空间,蓝色区域会垂直滚动.
我以为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)当我在iOS中使用Safari时,我点击了一个需要输入名称和地址的表单,我在键盘区域中获得了快捷方式.例如,当焦点位于名字字段时,这是键盘.我可以点击"罗伯特"而不是输入名字.
类似的事情发生在姓氏,电话,电子邮件,邮政编码的字段中.
我可以在原生iOS应用程序中获得类似的东西UITextField吗?有没有办法标记一个字段,以便键盘将提供这些快捷方式的建议?
如果 Javascript(或 Typescript)函数签名具有多行参数(在 Typescript 中很容易发生,类型名称较长),则 Visual Studio Code 在我点击后会像这样缩进return:
我更喜欢它排列论据,如下所示:
是否有某个设置可以自动执行此操作,这样我就不必手动缩进代码?
(我也想对函数调用执行此操作。)
javascript code-formatting indentation auto-indent visual-studio-code
我想在 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) 我是 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) ios ×3
android ×1
auto-indent ×1
c++ ×1
css ×1
flexbox ×1
html ×1
indentation ×1
ios10 ×1
java ×1
javascript ×1
jvm ×1
macos ×1
memory ×1
optimization ×1
pimpl-idiom ×1
ruby ×1
swiftui ×1
uitextfield ×1
versioning ×1
xcode ×1