我有一个类如下:
class node
{
public:
node* parent;
std::list<node*> children;
};
Run Code Online (Sandbox Code Playgroud)
我应该使用智能指针而不是原始指针吗?为什么?如果是的话,什么样的智能指针?
我有一个DrawingVisual该rappresents其几何形状由这个描述的路径元素的语法:
"m106,59.3c0-1.98,0,0-4.95,0.989-3.96,0.989-13.8,3.96-20.8,4.95-6.92,0-14.8-3.96-17.8-3.96-1.98,2.97,3.96,10.9,7.91, 13.8,2.97,1.98,9.89,3.96,14.8,3.96,4.95-0.989,10.9-2.97,13.8-6.92,2.97-2.97,5.93-10.9,6.92-12.9z"
为了呈现视觉效果我使用MyCanvas类,它提供了命中测试功能:
public class MyCanvas : Panel
{
public List<Visual> Visuals = new List<Visual>();
private List<DrawingVisual> Hits = new List<DrawingVisual>();
public void AddVisual(Visual Visual)
{
this.Visuals.Add(Visual);
base.AddVisualChild(Visual);
base.AddLogicalChild(Visual);
}
public List<DrawingVisual> GetVisuals(Geometry Region)
{
GeometryHitTestParameters Parameters = new GeometryHitTestParameters(Region);
this.Hits.Clear();
HitTestResultCallback Callback = new HitTestResultCallback(this.HitTestCallBack);
VisualTreeHelper.HitTest(this, null, Callback, Parameters);
return this.Hits;
}
private HitTestResultBehavior HitTestCallBack(HitTestResult Result)
{
GeometryHitTestResult GeometryRes = (GeometryHitTestResult)Result;
DrawingVisual DVisual = Result.VisualHit as DrawingVisual;
if (DVisual != null && GeometryRes.IntersectionDetail == …Run Code Online (Sandbox Code Playgroud) 我现在正在学习WPF和MVVM(或者至少我正在尝试......).
我创建了一个小样本应用程序,它显示了一个带有2个按钮的窗口,每个按钮都应显示一个新的View on Click.所以我创建了3个UserControls(带有2个按钮的DecisonMaker,以及每个"clicktarget"的一个Usercontrol).
所以我将MainWindow的CotentControl绑定到我的MainWindowViewModel中名为"CurrentView"的属性
MainWindow.xaml代码:
<Window x:Class="WpfTestApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTestApplication"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding CurrentView, Mode=OneWay}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindowViewModel的代码:
class MainWindowViewModel
{
private UserControl _currentView = new DecisionMaker();
public UserControl CurrentView
{
get { return _currentView; }
set { _currentView = value; }
}
public ICommand MausCommand
{
get { return new RelayCommand(LoadMouseView); }
}
public ICommand TouchCommand
{
get { return new RelayCommand(LoadTouchView); }
}
private void LoadMouseView()
{
CurrentView = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个好的面部,情感和语音识别方法C#.对于人脸识别,我早期使用的是Emgu CV,它不准确,在低光照条件下性能非常低.我还需要找到用户的情感.无论是悲伤还是快乐.但我发现Emgu CV并不容易.
同样对于语音识别我还没有找到任何解决方案,我发现语音识别,但它不是我需要的.
我不想使用任何在线API.任何人都可以建议我使用哪些SDK或算法来实现面部,情感和语音识别?
我正在开发一个旨在渲染大量形状的应用程序.每个形状都可以分配给特定图层.
我将输入数据作为形状列表获取,其中对于每个形状,我有一个string属性,表示形状所属的层.
现在,我需要开发一种方法,允许我只选择(绘制)属于给定选定图层列表的那些形状.在伪代码中:
void draw_if(sorted_list shapes, list<string> selected_layers)
{
for each shape in shapes
{
if (shape.layer in selected_layers)
shape.draw();
}
}
Run Code Online (Sandbox Code Playgroud)
关键是我想尽快执行此操作; 因此,我需要选择正确的数据结构和正确的算法.
所选图层列表是一个字符串列表(1÷100个不同的图层),但如果出于性能原因需要,可以将其转换为其他数据类型.
形状根据其z顺序排序.
我正在使用一个包含多个枚举的类的库.这是一个例子
class TGNumberFormat
{
public:
// ...
enum EAttribute { kNEAAnyNumber
kNEANonNegative
kNEAPositive
};
enum ELimit { kNELNoLimits
kNELLimitMin
kNELLimitMax
kNELLimitMinMax
};
enum EStepSize { kNSSSmall
kNSSMedium
kNSSLarge
kNSSHuge
};
// etc...
};
Run Code Online (Sandbox Code Playgroud)
在代码中,我必须参考这些TGNumberFormat::kNEAAnyNumber例子.我正在编写一个经常使用这些值并且代码变得丑陋的GUI.有什么方法可以导入这些枚举,只需输入kNEAAnyNumber?我真的不希望这些名称中的任何一个重叠.我已经尝试了各种使用using关键字的方法,没有人会编译.
我需要一个接一个地执行大量语句,并且我需要在sigle语句抛出异常时,程序流继续执行下一个语句,例如:
double a = Double.Parse("2.5");
double b = Double.Parse("ADFBBG");
Geometry g = Geometry.Parse("M150,0L75,200 225,200z");
Run Code Online (Sandbox Code Playgroud)
所有语句都必须执行,所以我需要一种级联的try-catch块:
double a, b;
Geometry g;
try
{
a = Double.Parse("2.5");
}
catch
{}
try
{
b = Double.Parse("ADFBBG");
}
catch
{}
try
{
g = Geometry.Parse("M150,0L75,200 225,200z");
}
catch
{}
Run Code Online (Sandbox Code Playgroud)
显然,这不是编写程序的最优雅方式.有更好的方法(更优雅,不会显着降低性能)?
我尝试Func<TResult>以这种方式使用委托:
我写了以下方法:
T Try<T>(Func<T> func)
{
try
{
return func();
}
catch
{
return default(T);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以像这样使用它:
double x = Try(() => Double.Parse("77"));
Geometry g = Try(() => …Run Code Online (Sandbox Code Playgroud) 我有一个带有一系列节点的XML文件.每个节点代表一个我需要解析并添加到排序列表中的元素(顺序必须与文件中找到的节点相同).
目前我正在使用顺序解决方案:
struct Graphic
{
bool parse()
{
// parsing...
return parse_outcome;
}
};
vector<unique_ptr<Graphic>> graphics;
void producer()
{
for (size_t i = 0; i < N_GRAPHICS; i++)
{
auto g = new Graphic();
if (g->parse())
graphics.emplace_back(g);
else
delete g;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,只有图形(实际上是派生的类的实例Graphic,Line,Rectangle等,这就是为什么new)才能正确解析,它才会被添加到我的数据结构中.
由于我只关心将图形添加到列表中的顺序,我虽然是异步调用解析方法,因此生产者的任务是从文件中读取每个节点并将此图形添加到数据结构中,同时对消费者有每当一个新的图形已准备好被解析解析每个图形的任务.
现在我有几个消费者线程(在main中创建),我的代码如下所示:
queue<pair<Graphic*, size_t>> q;
mutex m;
atomic<size_t> n_elements;
void producer()
{
for (size_t i = 0; i < N_GRAPHICS; i++)
{
auto g = new Graphic();
graphics.emplace_back(g);
q.emplace(make_pair(g, …Run Code Online (Sandbox Code Playgroud) 为什么我不能使用继承Shapes类的类?
我需要Rectangle用一些方法扩展类,但是我想以我使用的方式使用这个类,我该Shape怎么办?
我有base继承base该类的类和类:
class base
{
};
class derived : public base
{
std::string str;
};
Run Code Online (Sandbox Code Playgroud)
我需要derived使用指向类的指针来管理base类,但以下代码会导致内存泄漏:
base* ptr = new derived();
delete ptr;
Run Code Online (Sandbox Code Playgroud)
我有演员ptr,还是有更好的选择?
c++ ×5
c# ×4
.net ×3
wpf ×3
c++11 ×2
performance ×2
drawing ×1
enums ×1
exception ×1
func ×1
hittest ×1
inheritance ×1
memory-leaks ×1
mvvm ×1
pointers ×1
polymorphism ×1
search ×1
shape ×1
try-catch ×1