小编Bra*_*ler的帖子

用于匹配函数和捕获其参数的正则表达式

我正在研究一个计算器,它需要字符串表达式并对它们进行评估.我有一个函数,使用Regex在表达式中搜索数学函数,检索参数,查找函数名称并对其进行求值.我遇到的问题是,如果我知道将会有多少参数,我只能做到这一点,我无法正确使用正则表达式.如果我只是通过字符拆分()字符的内容,,那么我不能在该参数中进行其他函数调用.

这是函数匹配模式: \b([a-z][a-z0-9_]*)\((..*)\)\b

它只适用于一个参数,我可以为每个参数创建一个组,不包括嵌套函数内的参数吗?例如,它将匹配:func1(2 * 7, func2(3, 5))并为:2 * 7和创建捕获组func2(3, 5)

这里我用来评估表达式的函数:

    /// <summary>
    /// Attempts to evaluate and store the result of the given mathematical expression.
    /// </summary>
    public static bool Evaluate(string expr, ref double result)
    {
        expr = expr.ToLower();

        try
        {
            // Matches for result identifiers, constants/variables objects, and functions.
            MatchCollection results = Calculator.PatternResult.Matches(expr);
            MatchCollection objs = Calculator.PatternObjId.Matches(expr);
            MatchCollection funcs = Calculator.PatternFunc.Matches(expr);

            // Parse the expression for …
Run Code Online (Sandbox Code Playgroud)

c# regex

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

如何将此WPF控件添加到我的WinForm中?

我知道,我必须用一个ElementHost显示在WinForm的WPF控件,但由于WPF控件是第三方软件,而且只配备了一个XML文件和DLL文件.

控件是AvalonEdit,我将两个ICSharpCode.AvalonEdit.xmlICSharpCode.AvalonEdit.dll文件添加到我的项目中,然后我去了Project -> Add Reference并添加了DLL作为参考.现在我可以ICSharpCode在我的代码中访问命名空间,所有的类和方法都暴露出来,但从这一点来说,我不确定如何在我的WinForm中实际使用该控件.

我期待WPF控件出现在解决方案资源管理器中,但事实并非如此.我尝试将ElementHost控件添加到我的WinForm,但是当我尝试选择托管内容时,没有控件出现,所以它不知道我的WPF控件.如何在WinForm中使用AvalonEdit WPF控件?

c# wpf winforms avalonedit

16
推荐指数
2
解决办法
9312
查看次数

将XML文件读取为DataSet

我对解析XML文件缺乏经验,而且我将线图数据保存到xml文件中,所以我做了一些研究.根据这篇文章,在阅读XML文件的所有方法中,DataSet最快.我使用它是有道理的,DataSet因为可能有大量的数据.这是我的图形文档的外观:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<BreezyCalc>
    <Graph Version="3.0" Mode="static">
        <Range>
            <X Min="-20" Max="20" />
            <Y Min="-20" Max="20" />
        </Range>
        <Lines>
            <Line Name="MyLine1" R="0" G="255" B="0">
                <Point X="-17" Y="9" />
                <Point X="7" Y="-5" />
                <Point X="10" Y="4" />
                <Point X="-6" Y="2" />
            </Line>
            <Line Name="MyLine2" R="255" G="0" B="0">
                <Point X="-7" Y="3" />
                <Point X="8" Y="-1" />
                <Point X="-4" Y="-4" />
                <Point X="-1" Y="6" />
            </Line>
        </Lines>
    </Graph>
</BreezyCalc>
Run Code Online (Sandbox Code Playgroud)

由于这些行中可能存在大量的点,因此我需要尽可能快地以尽可能少的资源获取数据.如果有更快的方法DataSet,请赐教.否则,有人可以告诉我如何使用DataSet我的XML解析器获取我的图形数据吗?

c# xml performance dataset xml-parsing

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

C++ - 模板类中模板函数的单独声明/定义

我知道在头文件中声明模板类方法并在源文件中定义它的语法如下:

myclass.h

template <typename T>
class MyClass {
  public:
    void method(T input);
  private:
    T privVar;
};
Run Code Online (Sandbox Code Playgroud)

myclass.cpp

template <typename T>
void MyClass<T>::method(T input) {
    privVar = input;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果该方法也是模板怎么办?我正在为basic_string类添加方法,我想知道如何编写函数的实现.

MyString.h

template <class _Elem   = TCHAR,
          class _Traits = std::char_traits<_Elem>,
          class _Ax     = std::allocator<_Elem>>
class String
    : public std::basic_string<_Elem, _Traits, _Ax> {
  private:
    // Types for the conversion operators.
    typedef       _Elem* _StrTy;
    typedef const _Elem* _ConstStrTy;

    //...

  public:
        // Conversion operators so 'String' can easily be
        // assigned to …
Run Code Online (Sandbox Code Playgroud)

c++ oop methods implementation templates

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

ASP.NET MVC 4 Visual Studio 2010项目模板不存在

我已经下载并安装了使用MVC 4和VS2010的所有先决条件.VS2010 SP1更新,VS2010的ASP.NET MVC 4,VS2010的SSDT和LocalDB.当我在VS2010中创建一个新网站时,应该有一个"ASP.NET MVC 4 Web应用程序"模板,但没有.如何获取模板以便在Visual Studio 2010中启动新的MVC 4网站?

asp.net-mvc visual-studio-2010 asp.net-mvc-4

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

C++ - 我应该使`operator +`const?它会返回参考吗?

当一个类重载时operator+,是否应该将其声明为const,因为它不对该对象进行任何赋值?此外,我知道operator=operator+=返回引用,因为已进行分配.但是,怎么样operator+?当我实现它时,我应该复制当前对象,将给定的对象添加到该对象中,并返回该值吗?

这是我有的:

class Point
{
public:
    int x, int y;

    Point& operator += (const Point& other) {
        X += other.x;
        Y += other.y;
        return *this;
    }

    // The above seems pretty straightforward to me, but what about this?:
    Point operator + (const Point& other) const { // Should this be const?
        Point copy;
        copy.x = x + other.x;
        copy.y = y + other.y;
        return copy;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是正确的实施operator+吗?或者有什么我忽略的可能会导致麻烦或不必要的/未定义的行为?

c++ oop reference operator-overloading operators

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

Win32 C++ - 当窗口恢复时做一些事情,哪条消息?

所以,我有一个使用纯WinAPI的基于对话框的应用程序.有一个主对话框,然后是多个其他对话框,它们是工具窗口.这些工具窗口用于自由浮动,用户可以拖动它们,隐藏它们并显示它们,但它们没有任务栏条目.这就是我的意图,但问题是,当我从主窗口切换到另一个应用程序时,然后单击主窗口的任务栏条目,主窗口将显示,但工具窗口不会.它们隐藏在主窗口后面,有时隐藏在其他应用程序的窗口之后,在移动所有最顶层窗口并追踪工具窗口之前,您无法使用它们.

因此,我正在努力解决这个问题,当用户恢复窗口的最小化时,我想通过所有工具窗口进行枚举并将它们带到前面,也许是通过调用SetActiveWindow().

但是当窗口恢复时会发送什么消息?我在想WM_SHOW或WM_RESTORE,但它们不存在.

另一个问题,如果你回答这个问题,第一个问题是无关紧要的,因为我将不再需要使用该解决方法:是否有更好的方法将所有工具窗口置于前面?

windows winapi

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

Razor C# - 从数据库中获取数据

我正在使用WebMatrix,我创建了一个数据库并放置了一个包含几行数据的表.我可以连接到它并获取数据WebGrid,但它只提供了一种使用表输出数据的方法.

这是我的'shows.cshtml'代码:

@{
    var db = Database.Open("TVPort");
    var shows_data = db.Query("SELECT * FROM shows");
    var shows_grid = new WebGrid(source: shows_data);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是枚举查询返回的每一行,并使用每列的值执行任何我想要的操作.但是WebGrid唯一允许您在表格中输出数据.我今天刚开始使用WebMatrix和Razor语法.

另外(在这里提出问题,并不认为它足以成为它自己的问题),有没有办法为我的'shows.cshtml'页面制作一个C#代码文件?在Visual Web Developer 2010中,每个页面都有一个'page.aspx'文件和一个'page.aspx.cs',其中'page.aspx.cs'文件允许您在页面中使用自定义函数,或执行任务页面加载时 在WebMatrix中使用CSHTML是否有类似的行为?或者是所有代码都应该与实际页面内联?

c# sql-server asp.net webmatrix razor

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

JUCE C++ - VST插件创建

我想用c ++制作VST插件.我读到JUCE库比使用Steinberg SDK更好.我的问题是,当我在谷歌教程中它只涉及与应用程序开发有关的通用主题,而不是该库最初设计的专用音频插件接口.

我希望你们能指点我的教程,包括使用JUCE框架制作vst插件(可能是一个简单的效果,如低通滤波器).或者,如果有人能告诉我有关在visual studio(2008)中开发VST插件的更好或更简单的方法,并链接到将帮助我入门的资源.

c++ audio vst visual-studio-2008 juce

3
推荐指数
2
解决办法
5848
查看次数

C++在类中包装cin和cout - 重载<<和>>运算符

我正在尝试创建一个Console类.我想换行cin,并cout在课堂上和重载<<>>运营商.所以我可以这样使用这个类:

// Output
Console << "Call cout from Console" << endl;

// Input
string str;
Console >> str; // Call cin
Run Code Online (Sandbox Code Playgroud)

我最好的猜测是:

class Console {
//...
public:
    ostream& operator<< (ostream& os)
    {
        cout << os;
        return &cout;
    }
    //...
};
Run Code Online (Sandbox Code Playgroud)

但我知道这是错的,我怎么能重载操作符来使用Console类作为cincout

c++ cout operator-overloading stream cin

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