小编Dan*_*ien的帖子

是否允许在std :: string的实现中进行此优化?

我只是想着实施std::string::substr.它返回一个新std::string对象,这对我来说似乎有点浪费.为什么不返回一个引用原始字符串内容的对象,并且可以隐式赋值给std::string?一种对实际复制的懒惰评价.这样的类看起来像这样:

template <class Ch, class Tr, class A>
class string_ref {
public:
    // not important yet, but *looks* like basic_string's for the most part

private:
    const basic_string<Ch, Tr, A> &s_;
    const size_type pos_;
    const size_type len_;    
};
Run Code Online (Sandbox Code Playgroud)

这个类的公共接口将模仿真实的所有只读操作std::string,因此使用将是无缝的.std::string然后可以有一个新的构造函数,string_ref因此用户永远不会更聪明.在您尝试"存储"结果的那一刻,您最终会创建一个副本,因此引用没有真正的问题指向数据,然后在其背后进行修改.

想法是这样的代码:

std::string s1 = "hello world";
std::string s2 = "world";
if(s1.substr(6) == s2) {
    std::cout << "match!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

std::string总共不会构造2个对象.对于执行大量字符串操作的代码来说,这似乎是一种有用的优化.当然,这不仅适用于std::string任何可以返回其内容子集的类型.

据我所知,没有实现这样做.

我想问题的核心是:

给定一个可以根据需要隐式转换为类的类std::string,是否符合库编写者的标准,将成员的原型更改为返回类型?或者更一般地说,库编写者是否有余地在这些类型的情况下作为优化返回"代理对象"而不是常规对象?

我的直觉是,这是不允许的,原型必须完全匹配.鉴于您不能单独重载返回类型,这将使​​图书馆编写者无法利用这些类型的情况.就像我说的,我认为答案是否定的,但我想我会问:-).

c++ optimization standard-library proxy-object

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

有没有办法让AuthorizeAttribute响应状态代码403 Forbidden而不是重定向?

如果用户未登录并且他们请求标记的操作[Authorize],则响应是重定向到Account/LogOn操作(状态代码302 Found).

有没有办法让响应成为状态代码403 Forbidden?

c# authorize-attribute http-status-code-403 asp.net-mvc-2

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

将除了EXCEPTION_STACK_OVERFLOW之外的VC++的__try/__移植到MinGW

我试图使用VC++的try-except语句将一些代码移植到MinGW:

bool success = true;

__try {
    //...
} __except ((EXCEPTION_STACK_OVERFLOW == GetExceptionCode())
            ? EXCEPTION_EXECUTE_HANDLER
            : EXCEPTION_CONTINUE_SEARCH) {
    success = false;
    _resetstkoflw();
}
return success;
Run Code Online (Sandbox Code Playgroud)

是否可以编写使用MinGW g ++捕获堆栈溢出异常的代码?

c++ mingw visual-c++ try-except

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

如何从\n分隔文件中读取字符串

我正在尝试读取返回分隔文件.充满了短语.

我正在尝试将每个短语放入一个字符串中.

问题是当我尝试用文件读取时

fscanf(file,"%50s\n",string);
Run Code Online (Sandbox Code Playgroud)

该字符串只包含一个单词.当它与空间碰撞时,它会停止读取字符串

c scanf stdio fgets

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

将自定义安装目录选项添加到Autoconf生成的配置脚本

configure 脚本在帮助消息中始终包含以下内容:

...
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files …

automake autoconf install configure make-install

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

gdb:tstart错误的含义"当你的目标是'exec'时你不能这样做"

我希望t每次程序到达某一行时记录局部变量的值.因此,我试过:

(gdb) trace stoer_wagner_min_cut.hpp :197
Tracepoint 1 at 0x4123a0: file ./boost/graph/stoer_wagner_min_cut.hpp, line 197.
(gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
> collect t
> end
(gdb) tstart
You can't do that when your target is `exec'
(gdb) break main
Breakpoint 2 at 0x401448: file time_stoer_wagner.cpp, line 50.
(gdb) run
Starting program: C:\Users\Daniel\Documents\projects\stoer_wagner_min_cut/time_stoer_wagner.exe
[New Thread 3908.0x39c]

Breakpoint 2, main () at time_stoer_wagner.cpp:50
50        std::ifstream ifs("prgen_500_50_2.txt");
(gdb) tstart
You can't do that …

c++ debugging trace gdb

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

为什么我无法使用IAudioEndpointVolume :: SetMasterVolumeLevelScalar为USB/Firewire音频接口设置主音量

我正在尝试修复一个围绕portmixer的Audacity错误.输出/输入级别可以使用mac版本的portmixer进行设置,但不能始终在Windows中进行设置.我正在调试portmixer的窗口代码,试图让它在那里工作.

使用IAudioEndpointVolume :: SetMasterVolumeLevelScalar设置主音量适用于板载声音,但使用专业外部USB或火线接口(如RME Fireface 400),输出音量不会改变,尽管它反映在该设备的Window声音控制面板中,还有系统调音台.

此外,在我们的程序之外,更改系统混音器的主滑块(在任务栏中)没有任何效果 - 声卡输出相同(完整)级别,而不管系统所处的级别如何.更改输出级别的唯一方法是使用硬件开发人员为卡提供的自定义应用程序.

IAudioEndpointVolume :: QueryHardwareSupport函数返回ENDPOINT_HARDWARE_SUPPORT_VOLUME,因此它应该能够执行此操作.

许多设备上的输入和输出都存在此行为.

这可能是Window的错误吗?

可以通过模拟(缩放)输出来解决这个问题,但这不是首选,因为它在功能上并不相同 - 更好的是让音频接口进行缩放(特别是如果它涉及前置放大器的输入).

c++ windows audio audacity wasapi

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

当CPP行拼接在C++ 0x原始字符串中撤消时,是否需要保留原始换行序列?

最新的C++ 0x草案n3126说:

删除反斜杠字符(\)后面紧跟一个新行字符的每个实例,拼接物理源代码行以形成逻辑源代码行.

...

在原始字符串文字的r-char序列中,将恢复在阶段1和2中执行的任何转换(三字符,通用字符名称和行拼接).

从技术上讲,这意味着C++预处理器只识别反斜杠后跟换行符,但我知道一些C++实现也允许Windows或经典Mac风格的行结尾.

是否需要符合C++ 0x的实现来保留紧跟\在原始字符串的r-char序列中的反斜杠字符的换行符序列?也许更好的问题是:是否需要Windows C++ 0x编译器来撤消每个行拼接"\\\r\n"而不是"\\\n"

c++ rawstring c-preprocessor c++11

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

如何在重定向之前加载新登录用户的配置文件

我启动了一个ASP.NET MVC 2项目,我正在构建自动生成的代码.

我遇到的问题是,在用户登录后,似乎新登录用户的配置文件未加载到该中HttpContext,因此我收到ProviderException消息"无法为匿名用户设置此属性"尝试在当前用户的配置文件中设置属性值时.

对于仅POST的LogOn操作,Visual Web Developer 2010 Express基本上生成:

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                FormsService.SignIn(model.UserName, model.RememberMe);
        //...
Run Code Online (Sandbox Code Playgroud)

其中FormsService是类型控制器的属性FormsAuthenticationService(也是生成的):

public class FormsAuthenticationService : IFormsAuthenticationService
{
    public void SignIn(string userName, bool createPersistentCookie)
    {
        if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }

    public void SignOut()
    {
        FormsAuthentication.SignOut();
    }
}
Run Code Online (Sandbox Code Playgroud)

FormsService.SignIn(model.UserName, model.RememberMe)我假设新登录帐户的信息可以立即供控制器使用之后,但似乎并非如此.例如,如果我在profile.SetPropertyValue("MyProfileProperty", "test")下面添加对FormsService#SignIn的调用,那么我得到ProviderException"无法为匿名用户设置此属性".

如何将新登录用户的个人资料加载 …

c# visual-web-developer asp.net-membership asp.net-profiles asp.net-mvc-2

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

如何使用per-DbContext状态正确实现DbCommandInterceptor?

我正在使用MVC 5教程关注Tom Dykstra的Entity Framework 6 Code First入门. 本教程的第4部分介绍了EF6的连接弹性和命令拦截功能.

作为演示命令拦截使用的一种方式,本教程提供了两个示例DbCommandInterceptor实现.One(SchoolInterceptorLogging)与记录器连接以记录执行的每个SQL命令,执行所花费的时间以及是否存在异常.另一个示例(SchoolInterceptorTransientErrors)模拟瞬态DB错误,以便可以测试连接弹性.

虽然本教程没有特别提到同步问题,但我认为因为单个实例DbCommandInterceptor是通过注册的DbInterception.Add(),所以DbContextDbCommandInterceptor必须同步所使用的状态.例如,SchoolInterceptorLogging应该可能同步使用_stopwatch,并且SchoolInterceptorTransientErrors应该同步_counter.

我想过通过ThreadStaticAttribute或使用线程本地存储ThreadLocal<T>.但是,我不确定这是否足够.假设我的应用程序使用DbContext.SaveChangesAsync()异步保存所有更改.同一个线程是否可以处理两个异步保存操作?如果是这样,那么线程本地存储将无法工作.

另一个想法是在调用上下文中存储每个DbContext状态.但是,使用时CallContext,建议只使用不可变类型.(参见Stephen Cleary的博客文章,Implicit Async Context("AsyncLocal").)

第三个想法是使用a ConcurrentDictionary键,其中键是DbCommandInterceptionContext传递给NonQueryExecuting()/ NonQueryExecuted(),ReaderExecuting()/ ReaderExecuted()或ScalarExecuting()/ ScalarExecuted()的对象,值是一个状态对象.但是,我对这种方法有两个问题:

  • 是个 DbCommandInterceptionContext对于每个保存操作,传递给*Executing()/ *Executed()方法对象是否不同?

    从设置断点ReaderExecuting()和调用GetHashCode()拦截上下文对象,对于每次重试而言,它似乎是不同的,更不用说保存操作(经过测试的EntityFramework版本6.1.3).

  • 这个 …

c# logging entity-framework interceptor entity-framework-6

6
推荐指数
0
解决办法
1342
查看次数