我正在尝试用C++创建一个"稀疏"矢量类,如下所示:
template<typename V, V Default>
class SparseVector {
...
}
Run Code Online (Sandbox Code Playgroud)
在内部,它将由a表示std::map<int, V>(其中V存储的值的类型).如果地图中不存在元素,我们将假装它等于Default模板参数中的值.
但是,我在重载下标运算符时遇到问题[].我必须重载[]操作符,因为我将此类中的对象传递给期望[]正常工作的Boost函数.
该const版本是很简单的:检查索引是否在地图上,它的返回值,如果是这样,或者Default以其他方式.
但是,非const版本要求我返回一个引用,这就是我遇到麻烦的地方.如果只读取值,我不需要(也不想)向地图添加任何内容; 但如果正在编写,我可能需要在地图中添加一个新条目.问题是重载[]不知道是读取还是写入值.它只返回一个引用.
有什么方法可以解决这个问题吗?或者也许要解决它?
这是一系列至少两个密切相关但不同的问题的一部分.我希望我能分别问他们做对了.
我试图让我的Visual C++ 2008应用程序在没有C运行时库的情况下工作.这是一个没有MFC或其他花哨的东西的Win32 GUI应用程序,只是简单的Windows API.
所以我将Project Properties - > Configuration - > C/C++ - > Advanced - > Omit Default Library Names设置为Yes(编译器标志/Zl)并重建.让我假装我写了一个合适的入口点函数,这是我的另一个问题的主题.
我收到两个链接器错误; 他们可能是相关的.链接器抱怨无法解析的外部符号__fltused和_memcpy在foobar.obj.毋庸置疑,我在我的程序中没有明确使用,但我确实memcpy在某处使用foobar.cpp.(我会使用,CopyMemory但结果证明是#defined与memcpy... 相同)
(我以为我可以memcpy通过使用编译器内部函数来解决问题#pragma intrinsic(memcpy),但这没有区别.)
如果我查看预处理器输出(添加/P到编译器命令行),我看到没有引用任何一个__fltused或_memcpy在foobar.i.
所以,我的问题是:这些链接器错误来自何处,以及如何解决它们?
我正在编写一个以全屏横向模式运行的Android游戏,并在窗口的左下角和右下角放置了按钮.问题是其中一个按钮是(在许多手机上)菜单按钮旁边,因此播放器可能会意外按下菜单.
如果短暂按下,我只需暂停游戏并显示游戏内菜单.没问题.
但如果按下按钮的时间更长,Android会打开屏幕下半部分的软键盘.由于它阻碍了,并且在此Activity中完全没用,我想禁用它.
我尝试了以下方法.
由于我只有一个视图(a GLSurfaceView)我在我的尝试中Activity.onCreate():
InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
它不起作用:菜单长按时软键盘仍然出现.
我把它添加到我的清单中:
<activity
android:windowSoftInputMode="stateAlwaysHidden"
>
Run Code Online (Sandbox Code Playgroud)
还有很多东西.
那么......还有办法吗?怎么样?
为我们的Django站点供电的MySQL数据库产生了一些完整性问题; 例如,引用不存在的行的外键.我不会谈论我们是如何陷入这种混乱的,但我现在正在研究如何解决这个问题.
基本上,我正在寻找一个扫描Django站点中所有模型的脚本,并检查所有外键和其他约束是否正确.希望问题的数量足够小,以便手动修复.
我可以自己编写代码,但我希望这里有人有更好的主意.
我发现了django-check-constraints,但它不太符合要求:现在,我不需要一些东西来防止这些问题,但要找到它们以便在采取其他步骤之前手动修复它们.
其他限制:
(稍后,我们将转换为InnoDB以获得正确的事务支持,以及可能在数据库级别上的外键约束,以防止将来出现类似问题.但这不是此问题的主题.)
有多个线程,比如B,C和D,每个线程都以高频率将小数据包写入缓冲区.他们拥有自己的缓冲区,没有其他人写过它.写作必须尽可能快,我已经确定使用synchronized它会让它变得无法接受.
缓冲区只是字节数组,以及第一个自由元素的索引:
byte[] buffer;
int index;
public void write(byte[] data) {
// some checking that the buffer won't overflow... not important now
System.arraycopy(data, 0, buffer, index, data.length);
index += data.length;
}
Run Code Online (Sandbox Code Playgroud)
每隔一段时间,线程A就会将每个人的缓冲区刷新到文件中.如果这部分有一些开销可以,所以synchronized在这里使用是没有问题的.
现在麻烦的是,一些其他线程可能正在写入缓冲区,而线程A正在刷新它.这意味着两个线程会index在同一时间尝试写入.这会导致数据损坏,我想阻止,但不使用synchronized该write()方法.
我已经感觉到,使用正确的操作顺序,可能还有一些volatile领域,这一定是可能的.有什么好主意吗?
我有一套RadioButton带有自定义风格的s.我想在当前选中的按钮周围显示边框.这应该很容易使用XML,但现在我想要边框动画.如果选中了一个新的单选按钮,边框应该用一个奇特的动画"飞"到它的新位置:
+------+
|* btn1| o btn2
+------+
+------+
o b|n1 * |tn2
+------+
+------+
o btn1 |* btn2|
+------+
Run Code Online (Sandbox Code Playgroud)
因此,我决定将边框设置为单独的View对象,因此我可以正确地设置它的动画.问题在于跟踪屏幕上相应单选按钮的位置.
我试图让它在没有动画的情况下首先工作.我当前的尝试看起来像这样(只显示相关属性):
<RelativeLayout
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
<RadioGroup
android:id="@+id/radio_group">
<RadioButton/>
<RadioButton/>
<RadioButton/>
</RadioGroup>
<View
android:id="@+id/selection_border"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
在OnCheckedChangeListener的RadioGroup,我周围移动选择边框通过设置它的利润率(我可以设置的位置,但是这是一个有点困难了RelativeLayout):
View radioButton = findViewById(checkedId);
View selectionBorder = findViewById(R.id.selection_border);
ViewGroup radioGroup = (ViewGroup)findViewById(R.id.radio_group);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(selectionBorder.getLayoutParams());
params.leftMargin = radioGroup.getLeft() + radioButton.getLeft();
params.topMargin = radioGroup.getTop() + radioButton.getTop();
selection.setLayoutParams(params);
selection.requestLayout();
Run Code Online (Sandbox Code Playgroud)
但是,在初始化时会发生故障.由于尚未进行布局,因此边框的位置设置不正确.似乎不可能立即强制重新布局,并且在布局完成后似乎也不可能获得事件.
所有这些麻烦让我相信必须有一种更清洁的方式来实现我想要的.有什么好主意吗?
我正在使用一些客户端JavaScript代码通过HTTP GET从Web服务器中提取大量JSON数据.数据量可能很大,比如50 MB.这是在局域网上,所以这不是一个问题,但它仍然需要十秒钟左右.
为了使我的界面更具响应性,我想以块的形式处理响应,一旦可用就显示UI中的数据(比方说,每MB或每秒).浏览器兼容性不是问题; 只要它适用于最新的Chrome和Firefox,它就没问题.但是,我无法修改服务器代码.
是否可以使用XMLHttpRequest或WebSockets或其他一些我没有听说过的技术来做到这一点?
XMLHttpRequest.responseText当状态为LOADING:时,显式为空
responseText属性必须返回运行这些步骤的结果:
- 如果状态不是LOADING或DONE返回空字符串并终止这些步骤.
- 返回文本响应实体主体.
但是我认为缓冲会在整个过程中的各个阶段发生,所以如果我设置定时器来定期轮询,它会起作用responseText吗?
据我所知,WebSockets也需要服务器端的特殊协议,所以这些协议已经完成.
限制:我无法修改服务器代码.
我们有一个服务器端呈现的HTML页面,其中包含一个外部JavaScript文件。要触发该文件中的代码,我们要调用一个函数并向其传递一些动态数据(以JSON的形式):
<script src="/static/foo/bar.js"></script>
<script>
foo.bar.init({biz: 42, qux: "quux"});
</script>
Run Code Online (Sandbox Code Playgroud)
我们从Nunjucks模板渲染它,并将JSON对象作为值传递data给上下文。它可以包含任意数据,包括用户提供的内容。
这是安全的,但是不起作用,因为<>&已经被逃脱了(由于Nunjucks自动转义):
foo.bar.init({{ data | dump }});
Run Code Online (Sandbox Code Playgroud)
这是可行的,但并不安全,因为JSON中的字符串可能包含以下文本</script>:
foo.bar.init({{ data | dump | safe }});
Run Code Online (Sandbox Code Playgroud)
如何说服Nunjucks渲染此JSON,以便可以安全正确地对其进行解释?听起来应该是一个已解决的问题,但是我在任何地方都找不到预制的解决方案。
我正在使用该qdbusxml2cpp工具为我的D-Bus服务器生成D-Bus适配器类.但是,它有以下缺点:
代码生成一次,然后您不应该修改它.但是,如果我们必须进行更改(见下文)然后更改XML(当然是以向后兼容的方式),该怎么办?
假设"适配器"具有与D-Bus接口完全相同的功能和签名.就我而言,这并不完全正确,例如,某些方法的命名方式不同.由于生成的代码使用QMetaObject::invokeMethod,因此仅在运行时检测到.如果我们将来需要重新生成代码,我们就无法明智地修改生成的代码.
在我看来,如果qdbusxml2cpp生成一个抽象类,只是一个标题,所有方法都是纯虚拟的,那就更好了.然后我可以编写一个类的实现,只需调用适配器上的正确方法,而无需通过Qt元类型系统.这解决了两个问题:
如果XML发生变化,我们只需重新生成标题.现在编译器会抱怨,直到我们正确实现新接口.
我们可以自由地在"adaptee"类中调用我们喜欢的任何函数,而不是保持与公共D-Bus接口中完全相同的签名.
我找不到上述任何工具或qdbusxml2cpp叉子.在我自己编写之前,上述方法是否存在任何问题,我可能会忽略,设计方面还是技术方面?也许元类型系统的局限性与抽象类或纯虚函数有关?
请注意,我需要这不仅可以使用方法,还可以使用属性和信号.
我还考虑编写一个包含"adaptee"的"中间"适配器,并提供D-Bus适配器所需的确切接口,但D-Bus适配器仍将使用元类型系统和运行时检查.当然,我们可以做得更好.
我的 Flutter 应用程序中的资产总共大约 300 MB(大量媒体文件,这是应用程序的本质,不能合理地减少)。
据我了解,有两种方法可以将应用上传到 Play 商店:
对于 APK,解决此限制的方法是APK 扩展文件(通常为“obb”文件),最大可达 2 GB。我可以尝试让它与 Flutter 一起使用,但 APK 交付方法有点过时,并且还有其他缺点,例如使用未使用的二进制文件增加安装大小。所以我宁愿不使用这种方法。
对于 App Bundles,类似的机制以动态资产交付的形式存在。有三个选项,具体取决于用户何时下载资产包:安装期间、安装后或按需。该install-time选项听起来最透明和简单,并且限制为 1 GB,因此它非常适合我的用例。
遗憾的是,Flutter尚不支持动态资产交付。幸运的是,在使用install-time交付时,看起来这些资产可以通过AssetManager系统提供的常规类获得。一开始我以为 Flutter 可能会在不需要编写任何 Java/Kotlin 代码的情况下获取它们,但是没有,它使用自己的资产机制,并且除了一个访问AssetManager. 因此,我必须自己做一些跑腿工作才能与 Java 世界进行交互,但这听起来可行。
为了首先创建包,我遵循了以下步骤。 …