我最近遇到了如何比较Fortran中的两个指针的问题.在C中,可以比较两个指针(pA == pB)
(带pA
和pB
指针),因为它们只是地址.但是fortran指针不仅仅是纯内存地址.代码if(pa.ne.pb)
(带有pa
和pb
是同一类型的指针)给了我一个错误
比较运算符'.ne.'的操作数 at(1)是TYPE(sometype)/ TYPE(sometype)
其中sometype是指针指向的类型.
有没有办法比较两个指针是否指向同一个目标?或者我是否必须为.ne.
指向的类型创建一个-operator?
我们的应用程序中有几个模块.我有一个项目,其中包含一组用于模块的自定义用户控件.请注意,此用户控件不会注入模块,而是用作XAML内联中的用户控件.
现在,用户控件可以在加载时抛出异常.我想在模块级别处理异常.我的想法是将一个eventaggregator注入模块构造函数,并在捕获异常时触发错误事件.
例如,模块的主视图如下
XAML
<inf:DockBase
x:Class="MainView"
xmlns:inf="clr-namespace:Infrastructure"
xmlns:usercontrols="clr-namespace:UserControls;assembly=Myusercontrollib">
<Grid>
<!--some code here-->
<usercontrols:CustomListControl source={Binding myList}/>
</Grid>
</inf:DockBase>
Run Code Online (Sandbox Code Playgroud)
代码背后
public MainView()
{
InitializeComponent();
}
public MainView(MainViewViewModel viewmodel, IEventAggregator eventAggregator)
:this()
{
_eventAggregator = eventAggregator;
}
Run Code Online (Sandbox Code Playgroud)
我在哪里可以从模块级别的用户控件中捕获激活?
返回内置类型的const值是一个很好的习惯吗?
原因是:
const int F()
{
}
int y;
F(x) = y;
Run Code Online (Sandbox Code Playgroud)
如果返回值为const,则上述代码将无法编译.但如果不是,F(x) = y;
则是一个非常隐蔽的错误.
由于没有意义为函数赋值,我认为总是为内置类型返回一个const值是一个很好的习惯吗?如果我总是返回内置类型的const值,有什么问题吗?
之间有什么区别
procedure(some_routine), pointer :: ptr
ptr => null()
Run Code Online (Sandbox Code Playgroud)
和
procedure(some_routine), pointer :: ptr
nullify(ptr)
Run Code Online (Sandbox Code Playgroud)
无效会在幕后做些什么吗?还是只是做同一件事的两种不同方式?
我有以下面试问题:
class someClass
{
int sum=0;
public void foo()
{
for(int i=0; i<100; i++)
{
sum++
}
}
}
Run Code Online (Sandbox Code Playgroud)
有两个并行线程在foo方法中运行.最后总和的价值从100到200不等.问题是为什么.据我所知,只有一个线程获得一个CPU,并且线程在运行时被抢占.在什么时候干扰会导致总和达不到200?
我有以下方法来计算列表中的前20个数字并返回它们.
static public List<int> CalculateTop20(List<int> nums)
{
List<int> Returned = new List<int>();
int count = nums.Count;
for (int j = 0; j < 20; j++)
{
var most = (from i in nums
group i by i into grp
orderby grp.Count() descending
select grp.Key).First();
Returned.Add(most);
nums.RemoveAll(item => item == most);
}
return Returned;
}
Run Code Online (Sandbox Code Playgroud)
除非我将它们返回到main并尝试将它们输出到控制台,它们只是出现:System.Collections.Generic.List'1 [System.Int32] ...
我有多个其他方法在整个程序中传递列表,但这是唯一一个给我这个问题的方法.此外,当我在计算它们的同时输出它们时,数字是正确的.
嗨,我正在使用 Skype4ComLib 检索 Skype 联系人,但出现错误:
由于以下错误,检索具有 CLSID {830690FC-BF2F-47A6-AC2D-330BCB402664} 的组件的 COM 类工厂失败:80040154 类未注册(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG)。
我的机器上安装了 Skype。
任何的想法?
我有这种功能.
function SomeFunction()
{
const int NUMBER_OF_CONCURENT_THREADS = 50;
List<Guid> sessions = new List<Guid>();
ManualResetEvent[] doneEvents = new ManualResetEvent[NUMBER_OF_CONCURENT_THREADS];
Action<int> makeServiceCall = (iter) =>
{
var proxy = GetProxy();
sessions.Add(proxy.GetCurrentSessionId());
doneEvents[iter].Set();
};
for (int i = 0; i < NUMBER_OF_CONCURENT_THREADS; ++i)
{
doneEvents[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((o) =>
{
int iter = i;
makeServiceCall(iter);
});
}
WaitHandle.WaitAll(doneEvents);
Assert.AreEqual(50, sessions.Count);
}
Run Code Online (Sandbox Code Playgroud)
问题是我IndexOutOfRangeException
在doneEvents[iter].Set();
代码行时得到了.请问,任何想法如何解决?
我需要能够恢复旧版本的源代码,对其进行一些工作(生成丢失的.exe文件),然后像现在一样放回源代码.
我如何使用Mercurial?
Mercurial项目包括旧版本和当前版本.
注意对于标记我的人,请告诉我原因.在发布之前,我查找了有关此主题的其他问题.其他人似乎在解决永久性的恢复,我的是临时恢复.如果你让我失望,因为我不知道答案 - 这就是我问这个问题的原因!
我刚刚开始在Fortran中使用指针,最近偶然发现,Fortran中的指针不能保持不变.这意味着,这样的事情是不可能的:
procedure(proc_type), pointer, parameter :: fPtr => myFunc
Run Code Online (Sandbox Code Playgroud)
我试图找出为什么这是不可能的原因.但我发现的唯一一件事就是"现代Fortran解释":
另请注意,常量可能不是指针[..],因为它们始终是变量.
但这并不能解释背后的原因.有谁知道这个?