How to call protected functions in parfor?
2 次查看(过去 30 天)
显示 更早的评论
This function is inside the common methods block of a class.
function GetWavelets(Me)
%Unrelated codes omitted…
parfor c=1:ttpc
%Me is the object itself, OnProgressReport is protectedly defined.
Me.OnProgressReport(c,ttpc);
%…
end
%…
end
The protected function OnProgressReport is unaccessible in the parfor loop. I found two workarounds:
- Use for loop instead of parfor;
- Set the Access attribute of OnProgressReport to public.
If I want to preserve the parfor loop for performance reasons, is it unavoidable to expose the OnProgressReport to public? Any other solutions?
Update 20190728: The OnProgressReport function is inherited from the superclass.
0 个评论
回答(1 个)
Edric Ellis
2019-7-26
编辑:Edric Ellis
2019-7-29
EDIT: Changed my version to inherit protected method from parent class
Hm, I can't reproduce the problem - I tried in R2016b and R2019a. Here are my test classes:
%% Super.m:
classdef Super
properties (Access = private)
Value = 7
end
methods (Access = protected)
function out = protectedMethod(obj, x)
out = obj.Value + x;
end
end
end
%% Test.m:
classdef Test < Super
methods
function out = runInParfor(obj)
parfor ii = 1:4
out(ii) = obj.protectedMethod(ii);
end
end
end
end
which I exercise like this:
>> runInParfor(Test)
ans =
8 9 10 11
So, it appears to work for me. Could you elaborate on what you're doing differently?