小编Ghi*_*ita的帖子

一种在没有秒的情况下从DateTime值数据中提取的方法

我有一个sql DateTime(ms sql server),想要在没有秒的情况下提取相同的日期:例如2011-11-22 12:14:58.000成为:2011-11-22 12:14:00.000

我怎样才能做到这一点?我想DATEADD与之结合使用,DATEPART但似乎非常容易出错(除了性能问题)

sql sql-server datetime

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

应该何时编译生成移动构造函数?

我使用VS11并使用以下内容:

class ContextWrapper
{
public:

    ContextWrapper()
    {
    } //it should be defaulted I *guess* in order to have automatic move constructor ?
      // no support in VS11 for that now  

    Context* GetContext()
    {
        return this->context.get();
    }

    void SetContext(std::unique_ptr<Context> context)
    {
        this->context = std::move(context);
    }

    //ContextWrapper(ContextWrapper&& other):  context(std::move(other.context))
    //{
    //} // I would like this to be generated by the compiler

private:
    ContextWrapper(const ContextWrapper&);
    ContextWrapper& operator= (const ContextWrapper&);

    std::unique_ptr<Context> context;
};
Run Code Online (Sandbox Code Playgroud)

我希望这个类生成移动构造函数/赋值.事实是我没有一个琐碎的构造函数,因为我没有动作吗?还是有其他因素影响这个?

c++ visual-c++ move-semantics c++11 visual-studio-2012

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

嵌套的Lambda捕获问题

我使用Visual Studio 2010编译器编译了它,它在嵌套的lambda上有编译器错误问题,捕获第一个lambda已捕获的变量:

    Functor& fn, const WorkData& workData

    group.run([&fn, workData](){
    async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
    ProcessorResult result = fn.Process(workData);

    return result;
    });
});
Run Code Online (Sandbox Code Playgroud)

我明白了:

**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
Run Code Online (Sandbox Code Playgroud)

似乎编译器不喜欢我尝试在未来实例中捕获group.run()方法已捕获的变量.

如果我创建本地副本,它可以工作:

    group.run([&fn, workData](){
    Functor& fnlocal = fn;
    WorkData workDatalocal = workData;

    async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
    ProcessorResult result = fnlocal.Process(workDatalocal);

    return result;
    });
});
Run Code Online (Sandbox Code Playgroud)

这种行为符合吗?我总是需要复制捕获的变量,以便在嵌套的lambda上捕获相同的变量?

c++ lambda visual-studio-2010 visual-studio c++11

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

重命名远程分支

我创建了一个本地分支X,在某些时候我推送到远程服务器(原点)

git push origin X
Run Code Online (Sandbox Code Playgroud)

我意识到将分支命名为X并希望它被称为Y是一个坏主意.问题是我已经将分支推送到了存储库.

从服务器上删除它并将其推送到这样的新名称是否安全?

push origin :X

// 'clone ' the branch under a new name locally ( X-> Y)

push origin Y
Run Code Online (Sandbox Code Playgroud)

已经从服务器获取的人将会发生什么.假设他们已经根据旧的X名称在本地创建了一个分支,他们没有在本地进行任何更改,也没有将它们推送到旧X分支的服务器上.

git

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

SQL服务器 - 值得索引大字符串键吗?

我有一个表有一个大字符串键(varchar(1024)),我想在SQL服务器上编入索引(我希望能够快速搜索它,但插入也很重要).在sql 2008中,我没有收到警告,但是在sql server 2005下它告诉我它超过了900字节,并且插入/更新了超过这个大小的列将被删除(或者该区域中的某些内容)

如果我想在这个大型列上编制索引,我有什么选择?如果我能的话,我不知道它是否值得.

sql-server

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

共享内存——需要同步

我见过一个项目,其中进程之间的通信是使用共享内存(例如::CreateFileMapping在 Windows 下使用)进行的,并且每次其中一个进程想要通知某些数据在共享内存中可用时,都会使用命名事件的同步机制通知相关方共享内存的内容发生了变化。

我担心这样一个事实,即读取新信息的进程不存在适当的内存栅栏,以知道它必须使数据副本无效并在生产者进程“发布”后从主内存中读取它。

您知道如何在 Windows 上使用共享内存来实现这一点吗?

编辑 只是想补充一点,在创建文件映射后,进程仅使用 MapViewOfFile() API 一次,并且对共享数据的每次新修改都使用通过初始调用 MapViewOfFile() 获得的指针来读取通过共享内存发送的新数据。正确的同步是否要求每次共享内存中的数据发生变化时,读取数据的进程每次都必须创建 MapViewOfFile() ?

c++ windows concurrency shared-memory

8
推荐指数
2
解决办法
8602
查看次数

奇怪的重复模板 - 变化

关于CRP如果我想实现它的轻微变化(使用模板模板参数),我得到一个编译错误:

template <template <typename T> class Derived>
class Base
{
public:
    void CallDerived()
    {
        Derived* pT = static_cast<Derived*> (this);
        pT->Action(); // instantiation invocation error here
    }
};

template<typename T>
class Derived: public Base<Derived>
{
public:
    void Action()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

我不确定会选择这个表单(不能为我编译)而不是使用它(这可行)

template <typename Derived>
class Base
{
public:
    void CallDerived()
    {
        Derived* pT = static_cast<Derived*> (this);
        pT->Action();
    }
};

template<typename T>
class Derived: public Base<Derived<T>>
{
public:
    void Action()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ templates crtp

8
推荐指数
2
解决办法
857
查看次数

C++转换问题

我知道我可以正确使用WinApi函数,DsGetDcName如下所示:

DOMAIN_CONTROLLER_INFO* dcInfo = nullptr;

unsigned long res = ::DsGetDcName(nullptr,
                        nullptr,
                        nullptr,
                        nullptr,
                            0,  &dcInfo);
Run Code Online (Sandbox Code Playgroud)

我知道,这是不自然的,但我想理解为什么一个人也不能这样写:

    void* dcInfo = nullptr;
unsigned long res = ::DsGetDcName(nullptr,
                        nullptr,
                        nullptr,
                        nullptr,
                        0,  (DOMAIN_CONTROLLER_INFO**) dcInfo);

if (res)
{
       wchar_t* name;
       name = static_cast<DOMAIN_CONTROLLER_INFO*> (dcInfo)->DomainControllerName;
}
Run Code Online (Sandbox Code Playgroud)

第二个版本void*用作指针类型,这就是我在运行它时(在调用时)获得访问冲突的原因::DsGetDcName.但我不明白为什么会这样?在指定void*dcInfo不是类型时,是否与内存对齐的方式有关DOMAIN_CONTROLLER_INFO* dcInfo

我发现了问题,我实际上可以使用复杂的不安全的void*版本,我只是没有将正确的指针地址传递给该函数.这里是:

void* dcInfo = nullptr;
unsigned long res = ::DsGetDcName(nullptr,
                        nullptr,
                        nullptr,
                        nullptr,
                        0,  (DOMAIN_CONTROLLER_INFO**) &dcInfo);
Run Code Online (Sandbox Code Playgroud)

请注意,我通过(DOMAIN_CONTROLLER_INFO**) &dcInfo而不是 …

c++ pointers

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

COM - 返回对象接口数组

我想从 IDL 返回一组接口。我试试这个:

interface ISecurityPolicy : IDispatch{
[id(6)]          HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IEntityPolicy*)* result);
}
Run Code Online (Sandbox Code Playgroud)

我收到此警告(在 VS 2010 中):警告 1 警告 MIDL2456:SAFEARRAY(接口指针)无法使用 midl 生成的代理工作:[过程“GetPolicyList”的参数“结果”(接口“ISecurityPolicy”)]

这是一个虚假警告,正如http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/84a632a9-4e29-4a95-8da7-f7aedb650339可能建议的那样?

com idl

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

SQL服务器 - 执行标量函数而不指定数据库名称

我有一个用户定义的SQL函数,我可以使用语法从管理工作室调用 dbo.Function(arg)

现在,当我不得不从C#调用此函数时如果我没有指定**dbname**.dbo.Function(arg)我得到SQL服务器找不到此用户定义函数的错误.如何在不指定dbname的情况下解决这个问题?我已经使用指定""的连接字符串连接到服务器initial catalog = dbname"


在这一点上我似乎无法重现上述行为:-)(使用SQL Server 2005或2008)我必须暂停这个问题

sql sql-server

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