小编Dan*_*Dan的帖子

一旦引用计数达到0,就让shared_ptr调用成员函数

我正在为一个不能与DuplicateHandle一起使用的HANDLE创建一个包装器,所以我试图将句柄包装在shared_ptr中.

想象一下以下代码:

class CWrapper
{
public:
    CWrapper() :
        m_pHandle(new HANDLE, &CWrapper::Close)
    {
        //code to open handle
    }

private:
    void Close() 
    { 
        //code to close handle
    }

    std::shared_ptr<HANDLE> m_pHandle;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用HANDLE参数创建close(不理想).无论哪种方式,我得到编译器错误"术语不评估为采用0参数的函数".这是因为隐含的这个指针吗?我该如何解决?如何从共享指针调用成员函数?

c++ raii shared-ptr

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

在SEO清洁Uri中删除的字符

我正在使用asp.net/C#而我正在为我正在创建的小型CMS系统创建独特的(?)uris.

我正在从我的文章标题中生成uri片段,例如,如果标题是"我的神奇文章",则uri将是www.website.com/news/my-amazing-article

这有两个部分.首先,你认为我需要删除哪些角色?我用" - "替换空格,我想我也应该删除"/"字符.你能再想到可能导致问题吗?"?" 也许?我应该删除所有非字母字符吗?

第二个问题,上面我提到过uris可能需要独一无二.在添加之前我打算检查uri列表以确保唯一性,但是我看到堆栈溢出使用了一个数字加上一个uri.我假设允许标题重复?你认为这会是一个更好的方法吗?

c# asp.net seo uri

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

需要一种设计模式来删除对象创建中的枚举和 switch 语句

假设我正在创建一个体育游戏,在这个游戏中,玩家可以玩各种位置,攻击,防御等。所以我从创建一个基类开始:

public abstract class Position
{
 public abstract string Name
 {
  get;
 }
}
Run Code Online (Sandbox Code Playgroud)

和子类...

public class Defender : Position
{
 public override string Name
 {
  get { return "Defender"; }
 }
}
Run Code Online (Sandbox Code Playgroud)

等等。这一切都很好。

但是现在我需要一个函数来创建这些对象。我需要一个按位置创建的函数。因此,一种可能的解决方案是创建所有位置的枚举并将此值传递给一个函数,该函数打开枚举并返回适当的对象。但这会触发我的代码气味警报。这个灵魂将类、枚举和函数内的开关联系在一起:

public static Position GetByType(Types position)
{
 switch(position)
 {
  case Types.Defender:
   return new Defender();
... and further terrible code
Run Code Online (Sandbox Code Playgroud)

我应该考虑什么解决方案?这是哪种设计模式?

design-patterns object-construction

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

如何强制32位应用程序在CreateObject中使用64位COM DLL?

以下代码的行为有所不同,具体取决于我是否使用32位或64位版本的wscript:

Set oSQLServer = CreateObject("SQLDMO.SQLServer")

For Each o in oSQLServer.ListInstalledInstances
    MsgBox o
Next
Run Code Online (Sandbox Code Playgroud)

在32位,它将列出我的32位服务器(SQL Server 2000)的实例,在64位我得到我的64位服务器(SQL Server 2008)的内容.我需要将此代码转换为C++(32位应用程序).但我需要展示64位服务器.如何强制创建的对象在注册表中使用64位dll和64位密钥?

sql-server com createobject 32bit-64bit

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

C++ - 自动将函数从标题移动到cpp文件

我在Visual Studio 2010中使用C++.有没有人找到一个宏或实用程序来将头文件中定义的成员函数移动到实现文件中?

例如,

virtual void SetName(const std::wstring& name) { m_name = name; }
Run Code Online (Sandbox Code Playgroud)

将被转换为

virtual void SetName(const std::wstring& name);
Run Code Online (Sandbox Code Playgroud)

在标题和

void ClassName::SetName(const std::wstring& name) 
{ 
    m_name = name; 
}
Run Code Online (Sandbox Code Playgroud)

在cpp文件中

c++ macros visual-studio-2010

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