小编Bab*_*ish的帖子

编译器优化

所以我有一个问题要问你.:)你能告诉我以下代码应该产生的输出吗?

#include <iostream>
struct Optimized
{
    Optimized() { std::cout << "ctor" << std::endl; }
    ~Optimized() { std::cout << "dtor" << std::endl; }
    Optimized(const Optimized& copy) { std::cout << "copy ctor" << std::endl; }
    Optimized(Optimized&& move) { std::cout << "move ctor" << std::endl; }
    const Optimized& operator=(const Optimized& rhs) { std::cout << "assignment operator" << std::endl; return *this; }
    Optimized& operator=(Optimized&& lhs) { std::cout << "move assignment operator" << std::endl; return *this; }
};

Optimized TestFunction()
{
    Optimized a;
    Optimized b …
Run Code Online (Sandbox Code Playgroud)

c++ optimization g++ visual-studio-2010

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

VS2010 C++可变参数模板示例

我有一个类模板,我似乎无法弄清楚如何执行Variadic模板样式实例化.

这是迄今为止我正在寻找的"代码":

template<typename _Classname, typename... Args>
class CFunctorStartExT 
{
  friend class CXXFactory;
protected:
  template<typename U>
  CFunctorStartExT(typename U& _functor, Args&... args) :
    m_Functor(_functor),
    m_args(args)
  {
  }
  virtual bool ProcessLoop(CSomeClass* pThread)
  {
    return m_Functor(pThread, m_args);
  }

protected:
  _Classname& m_Functor;
  Args... m_args;
};
Run Code Online (Sandbox Code Playgroud)

显然这不会编译:).我们的想法是创建一个类,它可以在构造函数中存储传入的值(如果有的话......它可能只有_Classname/U定义),以便稍后可以检索它们以传递给另一个函数中的m_Functor.

第一:Variadic模板甚至可以在VS2010中完成吗?我只是error C2143: syntax error : missing ',' before '...'从行中的模板声明得到编译问题template<typename _Classname, typename... Args>

第二,我想要完成的事情可以做到吗?谢谢!

c++ templates variadic visual-studio-2010

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

如何确定va_list是否为空

我一直在阅读一些编译器支持带宏的va_list,并且用户能够使用其他宏重载功能以计算va_list.

使用visual studio,有没有办法确定va_list是否为空(aka count == 0)?基本上我想知道这个条件:

extern void Foo(const char* psz, ...);
void Test()
{
  Foo("My String"); // No params were passed
}
Run Code Online (Sandbox Code Playgroud)

我最初的想法是做这样的事情:

va_list vaStart;
va_list vaEnd;
va_start(vaStart, psz);
va_end(vaEnd);
if (vaStart == vaEnd) ...
Run Code Online (Sandbox Code Playgroud)

问题是va_end只将param设置为null.

#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap)      ( ap = (va_list)0 )
Run Code Online (Sandbox Code Playgroud)

我在想可能包含一个终结符,但是我希望它能够从调用者中隐藏,以便不需要更改现有代码.

c++ variadic-functions visual-studio-2010 visual-c++

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

C++中适当的工厂模式

在C#中,您必须在类中声明所有内容,因此示例工厂模式可能如下所示:

namespace MySpace {

public class CFactory
{
  public static CFactory Current()
  {
    static CFactory singleton;
    return singleton;
  }
  public CBase Create() { return null; }
}

}
Run Code Online (Sandbox Code Playgroud)

在C++中,你没有这个限制.所以将"工厂"方法作为全局函数而不是让它们成为一个类被认为是"不好的做法"?

例1:

namespace MySpace {

// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }

}
Run Code Online (Sandbox Code Playgroud)

例2:

namespace MySpace {

// factory class
class CFactory
{
public:
  std::shared_ptr<CBase> CreateBase() { return NULL; }
};

// factory method exposing class
CFactory& GetFactory()
{
  static CFactory singleton;
  return singleton;
}

}
Run Code Online (Sandbox Code Playgroud)

例3:

namespace MySpace { …
Run Code Online (Sandbox Code Playgroud)

c++ oop std factory-pattern

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

插入Statement/Stored Proc死锁

我有一个使用linq死锁的插入语句.所以我把它放在一个存储过程中,周围的语句正在影响它.

现在Stored Proc已经死锁了.关于insert语句的一些内容是根据Server Profiler锁定自身.它声称其中两个插入语句正在等待释放PK索引:

当我将代码放入存储过程时,它现在声明此存储过程与此存储过程的另一个实例已死锁.

这是代码.select语句类似于linq在执行自己的查询时使用的语句.我只想查看该项是否存在,如果不存在则插入它.我可以通过PK或某些查找值找到系统.

       SET NOCOUNT ON;
       BEGIN TRY
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

        BEGIN TRANSACTION SPFindContractMachine
        DECLARE @id int;
        set @id = (select [m].pkID from Machines as [m]
                        WHERE ([m].[fkContract] = @fkContract) AND ((
                        (CASE 
                            WHEN @bByID = 1 THEN 
                                (CASE 
                                    WHEN [m].[pkID] = @nMachineID THEN 1
                                    WHEN NOT ([m].[pkID] = @nMachineID) THEN 0
                                    ELSE NULL
                                 END)
                            ELSE 
                                (CASE 
                                    WHEN ([m].[iA_Metric] = @lA) AND ([m].[iB_Metric] = @lB) AND ([m].[iC_Metric] = @lC) THEN 1
                                    WHEN NOT (([m].[iA_Metric] = …
Run Code Online (Sandbox Code Playgroud)

c# deadlock stored-procedures sql-server-2008 linq-to-sql

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

提供将XML作为字符串返回的WebMethod.

我一直在阅读当你想要返回XML时每个人都声明如何返回XmlDocument.有没有办法将原始XML作为字符串返回?我使用了许多返回包含XML的字符串的Web服务(由其他人编写).如果您返回XmlDocument,那么不在.Net上的用户如何使用该方法?

将原始XML作为字符串返回而没有包装的方法是<string></string>什么?

谢谢!

.net xml web-services webmethod

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