问题列表 - 第49396页

来自虚函数的未定义引用

我有一堂课,比如:

基础.h

class Base {
    public:
        Base();

        virtual int getInfo(int i);

    protected:
        int GetDetail (int iVal);

}

inline int Base::getInfo(int i){

     int output = GetDetail(i);
     return output;
};
Run Code Online (Sandbox Code Playgroud)

Ib Base.cpp,我定义了GetDetail。

int Base::GetDetail(int i){
int output;
// do work to output
return output;
}
Run Code Online (Sandbox Code Playgroud)

我有一些派生类从它们自己的实现 getInfo() 中调用 GetDetail。

当我从 Base.h 中的虚拟函数定义中删除对 getInfo() 的调用时,代码将使用派生类自己的实现进行编译。

当我使用从内联虚拟函数调用 GetDetail 的虚拟函数进行编译时,链接失败并显示:

对 GetDetail 的未定义引用。

有任何想法吗?

c++ undefined-reference

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

使用MPI获得性能提升

我测试了并行化(几乎)"令人难以置信的并行"(即完全可并行化)算法的性能增益,该算法总结了第一个N整数:

串行算法很简单:

N = 100000000
print sum(range(N))
Run Code Online (Sandbox Code Playgroud)

我的双核笔记本电脑(联想X200)的执行时间:0m21.111s.

并行化(带mpi4py)版本使用3个节点; 节点0计算整数的下半部分之和,节点1计算上半部分的总和.两者都将结果(via comm.send)发送到节点2,节点2汇总两个数字并打印结果:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()

N = 100000000

if rank == 0: 
  s = sum(range(N/2))
  comm.send(s,dest=2,tag=11)
elif rank == 1:
  s = sum(range(N/2+1,N))
  comm.send(s,dest=2,tag=11)
elif rank == 2:
  s1 = comm.recv(source=0, tag=11)
  s2 = comm.recv(source=1, tag=11)
  print s1+s2
Run Code Online (Sandbox Code Playgroud)

我的双核笔记本电脑的两个核心都被充分利用; 执行时间现在:15.746s.

我的问题:至少在理论上,执行时间几乎应该减半.哪个开销吃了4秒?(当然不是s1 + s2).那些发送/接收命令是否耗时?

编辑:在阅读了答案并重新思考问题之后,我认为4秒(在某些运行中甚至更多)被生成两个长度为50000000的列表所导致的高内存流量所吞噬; 我的笔记本电脑的两个核心共享一个公共内存(至少是主内存;我认为它们有独立的L2缓存),这正是瓶颈:因此,两个内核通常都希望同时访问内存(以获取内存)下一个列表元素),其中一个必须等​​待...

如果我使用xrange而不是range,则会延迟生成下一个列表元素并分配很少的内存.我测试了它并运行与上面相同的程序,xrange仅需11秒!

python parallel-processing mpi

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

如何防止某个类的多个对象实例化

MyInterface intf = (MyInterface) Class.forName(className).newInstance();
Run Code Online (Sandbox Code Playgroud)

我有一段代码,它将使用上面的调用按需创建新接口并调用某个方法.所有的实现类通常都包含许多final static变量和静态初始化代码,我想在其生命周期中只触发一次.

但是因为我正在使用newInstance()调用,所以我认为旧对象得到GCed并且类再次初始化,因此所有静态变量.

为了避免这种情况,我想把它放在一个缓存中,这样这些类就不会再次重构,因此会在它的生命周期内初始化一次.(注意:我的接口是线程安全的).

我应该把它放在一个Hashtable只是查找它还是有更好的方法来处理缓存?

java

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

如何查看线程等待的监视器?


我正在使用netbeans和它的分析器来查看线程活动.图表显示,当执行多个工作线程时,线程可以保持多种状态:运行,等待,监视.
我编写了我的java应用程序,以便其工作线程只使用只读变量而不需要同步.
但是,在执行netbeans探查器时,我可以看到我的线程经常处于监视器状态.我想他们正在等待显示器解锁,但我可以想象哪个显示器.

所以,我的问题是:有没有办法了解线程正在等待什么监视器?

谢谢

java multithreading profiling synchronization wait

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

Java,推荐使用HashMaps来获得永久可靠存储的方法吗?

我正在开发一个项目,其中对大量数据进行了大量搜索,因此我意识到使用传统的数据库结构它不起作用,因为我需要将表读入HashMap格式,该格式保留在内存中整个时间,能够在应用程序性能所需的时间内运行查询.

我想知道维护HashMap的推荐过程是关于从持久状态检索它们的速度,并考虑最小化所需的额外代码(现在我正在编写自定义类,从DB表中读取必要的数据,然后创建一个嵌套的HashMap反映了我需要它尽可能快地搜索的数据结构.我不确定是否只是写一个文本文件是一个正确的方法来确保数据被保留和没有损坏.任何建议表示赞赏

java hashmap data-structures

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

在Groovy中声明类型

当你没有在groovy中为变量声明一个类型时,我的理解是java虚拟机必须使用反射才能在执行任何方法之前弄清楚对象的类型并且有可能引发运行时错误.

如果这是正确的,那么当您声明类型时呢?java虚拟机是否仍然使用反射,因为原始代码是groovy?或者首先我对这整件事的理解是否正确?

groovy types

7
推荐指数
2
解决办法
7657
查看次数

Ext网格中的本地编辑

我使用分机Ext.grid.EditorGridPanel创建一个网格,使用阵列存储与本地数据来填充网格行.当我在网格中编辑值时,它们在左上角显示一个小红色三角形,并且商店数据也不会更新.

那么如何在EditorGridPanel中编辑本地数据呢?

我在Ext Editor Grid Example中看到了类似的问题,尽管该示例还设置了URL,请参见下图.

在此输入图像描述

解决方案:由于我只需要在本地保存更改,我只是执行了以下操作.

settingsGrid.on('afteredit', function(evt){
settingsGrid.store.commitChanges()
})
Run Code Online (Sandbox Code Playgroud)

它修复了问题,所有用户编辑的数据都在本地存储中快速更新.

grid extjs

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

如何构建类似iOS的设置模块?

我是iPhone开发的新手.Currentlly我正在为我的应用程序设置一个选项模块.用户应该能够编辑一些首选项.

我的第一个方法是有一些文本字段.但我真的很喜欢iOS如何处理编辑首选项.有某种标签.单击该标签将打开另一个视图,其中包含要编辑的字段.我希望你明白我的意思.

iOS如何实现这一目标?那是表格视图吗?

我的意思是这种设计

在此输入图像描述

iphone xcode interface-builder inappsettingskit

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

用Java测试正则表达式

我正在学习正则表达式,我正在使用以下代码片段进行测试:

String regex = "";
String test = "";
Pattern.compile(regex).matcher(test).find();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样的时候:

System.out.println(Pattern.compile("h{2,4}").matcher("hhhhh").find()); 
Run Code Online (Sandbox Code Playgroud)

它返回true而不是预期的错误.

要么

System.out.println(Pattern.compile("h{2}").matcher("hhh").find());
Run Code Online (Sandbox Code Playgroud)

它返回true而不是预期的错误.

有什么问题?也许这不是用于正确测试正则表达式的正确语句?

谢谢.

java regex

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

使用JQuery捕获Telerik MVC ComboBoxFor中的更改

我使用以下代码捕获HTML输入中的更改文本:

$(document).ready(function() {
    $(':input', document.myForm).bind("change", function() { setConfirmUnload(true); }); 
});
Run Code Online (Sandbox Code Playgroud)

这适用于普通的文本框和复选框.

我正在使用Telerik的MVC ComboBoxFor呈现输入标签,但似乎没有触发上面的JQuery.

任何想法如何捕获这个?

这就是HTML呈现的方式:

<div class="t-widget t-combobox t-header" id="InterviewRequired">
<div class="t-dropdown-wrap t-state-default">
    <input class="t-input" id="InterviewRequired-input" name="InterviewRequired-input" title="InterviewRequired" type="text" value="Select" />
    <span class="t-select t-header">
        <span class="t-icon t-arrow-down">select</span>
    </span>
</div>
<input id="InterviewRequired-value" name="InterviewRequired" style="display:none" type="text" value="0" />
Run Code Online (Sandbox Code Playgroud)

我也在Telerik论坛上问了这个问题,以防我在这里得不到答案.

jquery combobox telerik-mvc

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