小编Tho*_*mas的帖子

为稀疏向量重载operator []

我正在尝试用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版本要求我返回一个引用,这就是我遇到麻烦的地方.如果只读取值,我不需要(也不想)向地图添加任何内容; 但如果正在编写,我可能需要在地图中添加一个新条目.问题是重载[]不知道是读取还是写入值.它只返回一个引用.

有什么方法可以解决这个问题吗?或者也许要解决它?

c++ operator-overloading sparse-matrix subscript

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

构建不使用CRT函数的Visual C++应用程序仍引用一些

这是一系列至少两个密切相关但不同的问题的一部分.我希望我能分别问他们做对了.

我试图让我的Visual C++ 2008应用程序在没有C运行时库的情况下工作.这是一个没有MFC或其他花哨的东西的Win32 GUI应用程序,只是简单的Windows API.

所以我将Project Properties - > Configuration - > C/C++ - > Advanced - > Omit Default Library Names设置为Yes(编译器标志/Zl)并重建.让我假装我写了一个合适的入口点函数,这是我的另一个问题的主题.

我收到两个链接器错误; 他们可能是相关的.链接器抱怨无法解析的外部符号__fltused_memcpyfoobar.obj.毋庸置疑,我在我的程序中没有明确使用,但我确实memcpy在某处使用foobar.cpp.(我会使用,CopyMemory但结果证明是#defined与memcpy... 相同)

(我以为我可以memcpy通过使用编译器内部函数来解决问题#pragma intrinsic(memcpy),但这没有区别.)

如果我查看预处理器输出(添加/P到编译器命令行),我看到没有引用任何一个__fltused_memcpyfoobar.i.

所以,我的问题是:这些链接器错误来自何处,以及如何解决它们?

linker crt visual-c++

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

如何防止软键盘出现在我的Activity中?

我正在编写一个以全屏横向模式运行的Android游戏,并在窗口的左下角和右下角放置了按钮.问题是其中一个按钮是(在许多手机上)菜单按钮旁边,因此播放器可能会意外按下菜单.

如果短暂按下,我只需暂停游戏并显示游戏内菜单.没问题.

但如果按下按钮的时间更长,Android会打开屏幕下半部分的软键盘.由于它阻碍了,并且在此Activity中完全没用,我想禁用它.

我尝试了以下方法.

通过InputMethodManager

发件人:在没有任何键盘操作的情况下隐藏软键盘

由于我只有一个视图(a GLSurfaceView)我在我的尝试中Activity.onCreate():

InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

它不起作用:菜单长按时软键盘仍然出现.

通过AndroidManifest.xml

来自:如何阻止Android软键盘在我的整个应用程序中出现

我把它添加到我的清单中:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>
Run Code Online (Sandbox Code Playgroud)

还有很多东西.

那么......还有办法吗?怎么样?

android soft-keyboard

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

有没有工具来检查Django中的数据库完整性?

为我们的Django站点供电的MySQL数据库产生了一些完整性问题; 例如,引用不存在的行的外键.我不会谈论我们是如何陷入这种混乱的,但我现在正在研究如何解决这个问题.

基本上,我正在寻找一个扫描Django站点中所有模型的脚本,并检查所有外键和其他约束是否正确.希望问题的数量足够小,以便手动修复.

我可以自己编写代码,但我希望这里有人有更好的主意.

我发现了django-check-constraints,但它不太符合要求:现在,我不需要一些东西来防止这些问题,但要找到它们以便在采取其他步骤之前手动修复它们.

其他限制:

  • Django 1.1.1和升级已经决心打破局面
  • MySQL 5.0.51(Debian Lenny),目前有MyISAM
  • Python 2.5,可能是可升级的,但我现在不想

(稍后,我们将转换为InnoDB以获得正确的事务支持,以及可能在数据库级别上的外键约束,以防止将来出现类似问题.但这不是此问题的主题.)

mysql database django integrity

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

如何在没有同步方法的情况下从不同的线程安全地刷新缓冲区?

有多个线程,比如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在同一时间尝试写入.这会导致数据损坏,我想阻止,但使用synchronizedwrite()方法.

我已经感觉到,使用正确的操作顺序,可能还有一些volatile领域,这一定是可能的.有什么好主意吗?

java multithreading synchronized

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

如何制作跟踪选中的单选按钮的选择边框?

我有一套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)

OnCheckedChangeListenerRadioGroup,我周围移动选择边框通过设置它的利润率(我可以设置的位置,但是这是一个有点困难了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)

但是,在初始化时会发生故障.由于尚未进行布局,因此边框的位置设置不正确.似乎不可能立即强制重新布局,并且在布局完成后似乎也不可能获得事件.

所有这些麻烦让我相信必须有一种更清洁的方式来实现我想要的.有什么好主意吗?

android android-layout

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

使用AJAX或WebSockets访问部分响应?

我正在使用一些客户端JavaScript代码通过HTTP GET从Web服务器中提取大量JSON数据.数据量可能很大,比如50 MB.这是在局域网上,所以这不是一个问题,但它仍然需要十秒钟左右.

为了使我的界面更具响应性,我想以块的形式处理响应,一旦可用就显示UI中的数据(比方说,每MB或每秒).浏览器兼容性不是问题; 只要它适用于最新的Chrome和Firefox,它就没问题.但是,我无法修改服务器代码.

是否可以使用XMLHttpRequest或WebSockets或其他一些我没有听说过的技术来做到这一点?

XMLHttpRequest.responseText当状态为LOADING:时,显式为空

responseText属性必须返回运行这些步骤的结果:

  1. 如果状态不是LOADING或DONE返回空字符串并终止这些步骤.
  2. 返回文本响应实体主体.

但是我认为缓冲会在整个过程中的各个阶段发生,所以如果我设置定时器来定期轮询,它会起作用responseText吗?

据我所知,WebSockets也需要服务器端的特殊协议,所以这些协议已经完成.

限制:我无法修改服务器代码.

javascript ajax http websocket

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

如何使用Nunjucks将JSON安全地呈现为内联&lt;script&gt;?

我们有一个服务器端呈现的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,以便可以安全正确地对其进行解释?听起来应该是一个已解决的问题,但是我在任何地方都找不到预制的解决方案。

html javascript json nunjucks

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

我们可以生成抽象的Qt D-Bus适配器类吗?

我正在使用该qdbusxml2cpp工具为我的D-Bus服务器生成D-Bus适配器类.但是,它有以下缺点:

  • 代码生成一次,然后您不应该修改它.但是,如果我们必须进行更改(见下文)然后更改XML(当然是以向后兼容的方式),该怎么办?

  • 假设"适配器"具有与D-Bus接口完全相同的功能和签名.就我而言,这并不完全正确,例如,某些方法的命名方式不同.由于生成的代码使用QMetaObject::invokeMethod,因此仅在运行时检测到.如果我们将来需要重新生成代码,我们就无法明智地修改生成的代码.

在我看来,如果qdbusxml2cpp生成一个抽象类,只是一个标题,所有方法都是纯虚拟的,那就更好了.然后我可以编写一个类的实现,只需调用适配器上的正确方法,而无需通过Qt元类型系统.这解决了两个问题:

  • 如果XML发生变化,我们只需重新生成标题.现在编译器会抱怨,直到我们正确实现新接口.

  • 我们可以自由地在"adaptee"类中调用我们喜欢的任何函数,而不是保持与公共D-Bus接口中完全相同的签名.

我找不到上述任何工具或qdbusxml2cpp叉子.在我自己编写之前,上述方法是否存在任何问题,我可能会忽略,设计方面还是技术方面?也许元类型系统的局限性与抽象类或纯虚函数有关?

请注意,我需要这不仅可以使用方法,还可以使用属性和信号.

我还考虑编写一个包含"adaptee"的"中间"适配器,并提供D-Bus适配器所需的确切接口,但D-Bus适配器仍将使用元类型系统和运行时检查.当然,我们可以做得更好.

qt dbus qtdbus qdbusxml2cpp

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

如何测试和部署具有超过 150 MB 资产的 Flutter 应用程序?

我的 Flutter 应用程序中的资产总共大约 300 MB(大量媒体文件,这是应用程序的本质,不能合理地减少)。

据我了解,有两种方法可以将应用上传到 Play 商店:

  1. 包含所有平台二进制文件的 APK 文件(旧版)。看起来APK 限制为 100 MB
  2. 一个 App Bundle(新),它让 Play 商店找出要在何处部署哪些位。App Bundle对用户实际下载的内容有 150 MB 的限制

对于 APK,解决此限制的方法是APK 扩展文件(通常为“obb”文件),最大可达 2 GB。我可以尝试让它与 Flutter 一起使用,但 APK 交付方法有点过时,并且还有其他缺点,例如使用未使用的二进制文件增加安装大小。所以我宁愿不使用这种方法。

对于 App Bundles,类似的机制以动态资产交付的形式存在。有三个选项,具体取决于用户何时下载资产包:安装期间、安装后或按需。该install-time选项听起来最透明和简单,并且限制为 1 GB,因此它非常适合我的用例。

遗憾的是,Flutter尚不支持动态资产交付。幸运的是,在使用install-time交付时,看起来这些资产可以通过AssetManager系统提供的常规类获得。一开始我以为 Flutter 可能会在不需要编写任何 Java/Kotlin 代码的情况下获取它们,但是没有,它使用自己的资产机制,并且除了一个访问AssetManager. 因此,我必须自己做一些跑腿工作才能与 Java 世界进行交互,但这听起来可行。

为了首先创建包,我遵循了以下步骤。 …

android assets android-assets google-play flutter

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