小编Eam*_*nne的帖子

F#成员对元组的约束

当我意识到我需要一个额外的价值时,我通常会写一个"哦耶"的时刻写F#.这通常可以通过向传递的元组添加另一个值来轻松完成.但是,这意味着各种地图/排序/收集/等.需要更新,特别是函数fst/snd只适用于长度为2的元组.

这不是一个大问题,但在探索性开发过程中它很烦人,但我会写一个助手来减轻烦恼:

let inline get2 (t:^a) = (^a : (member get_Item2 : unit -> string) (t, ()))
let inline get2a (t:^a) = (^a : (member Item2 : string) t)
Run Code Online (Sandbox Code Playgroud)

但是,这两个版本都不起作用.第一个,get2不会编译,"预期的1个表达式,得到2".第二个,get2a将编译,但随后不能用于元组:"类型'(int*string)'不支持任何名为'get_Item2'的运算符".

有没有办法做到这一点,不涉及大量的重载?带有嘈杂的OverloadID注释 (F#2.0中不需要注释)

generics f# constraints

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

MSSQL:给定一个表的object_id,确定它是否为空

对于一些数据库健全性检查代码,我想确定一个特定的object_id是否对应于一个表.

是否有某种方式(例如)select count(*) from magic_operator(my_object_id)或类似的?

我非常喜欢可以在MS SQL server 2008b上运行的纯SQL解决方案.

sql reflection introspection sql-server-2008

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

C++ mixins通过模板:为什么这不起作用?

我有一个接口,它实现为一个带有许多纯虚拟公共方法的抽象基类.这些纯虚函数可以使用模板实现,因为子类之间的差异并不大 - 所以我的想法是使用多重继承来混合提供实现的适当模板化的助手类.但是,编译器抱怨基类是抽象的; 它没有考虑辅助混合的实现,所以认为没有实现所需的方法.

例如:

class TrivialList {
    int count;
public:
    TrivialList(int count) : count(count){}
    virtual double Average() const=0;
    int Count() const {return count;}
    virtual ~TrivialList(){}
};
template<typename TIndexable> class AverageHelper {
public:
    double Average() const {
        TIndexable const & self = static_cast<TIndexable const &>(*this);
        double sum=0.0;
        for(int i=0;i<self.Count();++) sum += self.Get(i);
        return sum / self.Count();
    }
};
class IndexableList : public TrivialList, public AverageHelper<IndexableList> {
    std::vector<double> backend;
public:
    IndexableList(int count) : TrivialList(count), backend(count) { }
    double & …
Run Code Online (Sandbox Code Playgroud)

c++ mixins

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

调试 ASP.NET MVC 操作过滤器

我最近不幸需要在 ASP.NET MVC 操作中找到错误的根本原因。结果发现错误出在动作上声明的动作过滤器之一中。然而,发现这个错误主要是靠运气,花费的时间比合理的要多。将来,我如何调试 ASP.NET MVC 操作过滤器的问题?

特别是:

  • 如何找出针对特定请求执行哪些过滤器以及以何种顺序执行?
  • 我可以通过这些过滤器吗?
  • 我至少可以在每个过滤器之间执行一些钩子以帮助找到根本原因(例如通过跟踪某些状态)吗?
  • 当过滤器中止请求或导致异常时,是否有一些我可以挂钩的事件?

我尝试使用 VS.NET 调试器;但是它不会以有用的方式进入过滤器。如果我在请求之前暂停执行,服务器会根据需要等待调试器,但是当我使用 Step into 或 step over 时,它只会继续而不通过任何过滤器(只是我的代码关闭)。如果我事先知道注册了哪些过滤器,我可能可以设置一个断点,但这几乎不切实际,特别是因为某些过滤器在第三方代码中。

debugging asp.net-mvc

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

以行高表示的 CSS 高度

使用 CSS,如何根据框(或其父)的行高来调整框的高度?

这将允许轻松地使文本区域成为行数的精确倍数,例如,允许恰好显示三行。

我不想要一个 javascript 解决方案,因为它们通常很慢并且与动态重新渲染的布局交互很差。

编辑: 在我的情况下,行高以无单位数字指定,如MDN 上推荐的那样,因此如果不需要行高单位来使其工作,这将很方便。

css

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

简单实用的C#代码生成(VS 2008或2010)

我推迟使用生成的代码作为构建过程的一部分,因为它担心它在构建过程中引入的复杂性.

有没有一种简单的方法可以将构建时生成的代码集成到应用程序中?

我正在考虑的代码类似于 Visual Studio执行的资源和设置文件代码生成:

  • 在这里进行智能感知很有价值
  • 属性之间有很多属性和链接,这些属性和链接很容易描述,但是不可能在C#中简洁地实现.
  • 底层资源是可修改的,代码自动重新生成,无需任何用户交互,也无需了解生成器的内部.

对于(非现实世界)示例,考虑通过类似命名的C#属性(或方法)生成对正则表达式的命名捕获组的访问者的预编译器.这是我想要生成的各种事物的典型:样板包装器的长片段,其主要功能是启用编译时检查错误(在上面;访问不存在的捕获组或写入和无效的正则表达式)和否不太重要的是,这些属性的智能感知.最后,这个设置应该可以由团队中的其他人轻松使用,只有极少的学习曲线.即,要求手动干预以重新生成代码是绝对不可接受的,也不能接受将生成的代码提交到源代码控制中.在最坏的情况下,每个人都应该只需要安装一些扩展; 理想情况下,扩展应该可以安装到源树中,这样任何签出树的人都可以在没有任何介绍的情况下构建项目.

为了使其运行良好,IDE集成非常重要:更新底层的"资源"定义文件应该触发 代码的重新生成而无需任何用户交互,理想情况下,生成器本身将很容易为其他开发人员维护(即一些发电机调试能力是一个加号).

最后,类似XSLT的方法是理想的,其中相同的模板可以应用于各种输入资源 ; 因为这意味着你甚至不需要查看实际的生成器代码,如果你想要做的就是更新资源,并且因为它使模板重用变得微不足道.

我看过T4,但是从我看到的这个方法有一个不太方便的ASP方法,模板和资源没有干净地分开(即,生成器负责查找资源 - 这使模板重用变得不那么容易).

是否有更好(更干净)的解决方案或运行T4的某种方式,以便可以轻松地重复使用相同的模板并且(很像.NET设置文件)资源的任何更新都会自动触发已实现代码的重新生成?

简介: 我正在寻找可以实现的代码方法

  1. 当底层资源(不是模板!)发生变化时,无需开发干预即自动重新生成代码.
  2. 维护起来有点简单
  3. 能够在多个资源之间共享相同的生成器模板(其中,#1点可能意味着资源应该引用生成器,反之亦然).

c# t4 code-generation visual-studio

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

可以"使用<namespace>;" 指令在.NET中更有效率?

当我在C#中创建一个新的类文件时,通常的结构如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UnitTest
{
    class Class1
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

StyleCop不喜欢在命名空间之外使用指令,所以理想情况下,我会重构我的代码:

namespace UnitTest
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    class Class1
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

从我作为Java程序员的日子开始,我被告知最好只导入必要的引用,而不是像这样导入整个包:

import foo.bar.MyObject;
Run Code Online (Sandbox Code Playgroud)

代替

import foo.bar.*;
Run Code Online (Sandbox Code Playgroud)

我知道这也可以在C#中完成,增加的功能是你可以为类型使用别名(有时在使用本机代码时很有用):

using StringBuilder = System.Text.StringBuilder;
Run Code Online (Sandbox Code Playgroud)

或使用别名时:

using HANDLE = System.IntPtr;
using HDC = System.IntPtr;
Run Code Online (Sandbox Code Playgroud)

关于使用指令的最佳实践和效率,我的问题是:

  1. 是否更有效地在命名空间中使用语句,或者这纯粹是一种风格偏好?
  2. 如果只包含必要的项目更有效,而不是整个命名空间?

.net c# namespaces using stylecop

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

这个C++指针容器是否安全?

我想要一个类似于boost的安全C++指针容器scoped_ptr,但具有类似于值的复制语义.我打算在应用程序的最内层循环中将这个用于非常少使用的类的极少使用的元素,以获得更好的内存局部性.换句话说,只要它的"内联"内存负载很小,我就不关心这个类的性能.

我从以下开始,但我不是那么熟练; 以下是安全的吗?我是否重新发明轮子,如果是这样,我应该在哪里看?

template <typename T> 
class copy_ptr {
    T* item;
public:
    explicit copy_ptr() : item(0) {}
    explicit copy_ptr(T const& existingItem) : item(new T(existingItem)) {}
    copy_ptr(copy_ptr<T> const & other) : item(new T(*other.item)) {}
    ~copy_ptr()  { delete item;item=0;}

    T  * get() const {return item;}
    T & operator*() const {return *item;}
    T * operator->() const {return item;}
};
Run Code Online (Sandbox Code Playgroud)

编辑:是的,这是故意的,它的行为与正常值非常相似.分析表明该算法在其他方面相当有效,但有时会因缓存未命中而受到阻碍.因此,我试图通过提取当前包含在值中但实际上并未在最内层循环中使用的大blob来减小对象的大小.我宁愿在没有语义变化的情况下这样做 - 一个简单的模板包装器将是理想的.

c++ smart-pointers c++11

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

带有D3DX9的C++ - 内存大小以10 MB /秒的速度增长 - 为什么?

我正在研究3D引擎作为学校项目.我已经安装了虚拟泄漏检测器来摆脱内存泄漏(并且它工作,因为我不再获得任何这些转储).最近,我不小心让我的应用程序运行了5分钟...而我的电脑变得很慢.我通过注释掉行等来跟踪这个问题,但是我无法找到为什么在关闭应用程序之前C++不会释放我已清除的内存.

问题:"内部"内存泄漏,看起来C++只是在应用程序关闭后才删除内容

代码: 我的渲染代码(在pastebin Yz79Ck0b)

注意:我知道我不应该每次创建一个新的Mesh,但这不应该导致这个问题,对吧?我的IDE是Visual Studio 2008,我正在使用WIN32项目.当我取出纹理和模型时,我有0字节的内存增长.

c++ directx 3d

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