问题列表 - 第5788页

将指针存储在地图中的成员函数中

我想将字符串映射到实例成员函数,并将每个映射存储在映射中.

这样做的干净方式是什么?

class  MyClass
{
   //........
   virtual double GetX();
   virtual double GetSomethingElse();
   virtual double GetT();
   virtual double GetRR();
   //........
};


class Processor
{
 private:
      typedef double (MyClass::*MemFuncGetter)();
      static map<std::string, MemFuncGetter> descrToFuncMap;

 public:
        static void Initialize();
        void Process(Myclass m, string);
};

void Processor::Initialize()
{

     descrToFuncMap["X"]=&MyClass::GetX;
     descrToFuncMap["SomethingElse"]=&MyClass::GetSomethingElse;
     descrToFuncMap["RR"]=&MyClass::GetRR;
     descrToFuncMap["T"]=&MyClass::GetT;
};
void Processor::Process(MyClass ms, const std::string& key)
{
     map<std::string, Getter>::iterator found=descrToFuncMap.find(key);
     if(found!=descrToFuncMap.end())
     {
        MemFuncGetter memFunc=found->second;
        double dResult=(ms).*memFunc();    
        std::cout<<"Command="<<key<<", and result="<<result<<std::end;      
      }
 }  
Run Code Online (Sandbox Code Playgroud)

如果您发现这种方法存在问题并且常见的习惯用法是什么,请告诉我们?

也许,我应该使用if-else-if语句链,因为我有一个有限数量的成员函数,而不是一个令人困惑的func指针映射

顺便说一下,我在c ++ - faq-lite中找到了一些有用的信息

c++ design-patterns callback

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

检测python中是否存在charset

是否可以在 Python 中检查给定的字符集是否存在/已安装。例如:
check('iso-8859-1') -> True
check('bla') -> False

python character-encoding

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

我应该在多个表上使用sql JOIN关键字进行复杂连接吗?

我有以下要求:

select * 
    from tbA A, tbB B, tbC C, tbD D
where 
    A.ID=B.ID and B.ID2= C.ID2 and A.ID=D.ID and C.ID3=D.ID3 and B.ID4=D.ID4
and
    A.Foo='Foo'
Run Code Online (Sandbox Code Playgroud)

我多次听说过这种连接语法是折旧的,我应该使用'JOIN'关键字.

如何在这种复杂的连接中执行此操作(多个表连接在属于不同表的多个列上)?您认为这种最佳做法仍适用于此吗?

sql join

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

需要有关方法的冗长命名的建议

我正在编写一个用于创建几何形状的API,并且在编写我的方法时遇到了一些困难.

我们来看一个简单的例子:创建一个圆圈.我们大多数人可能熟悉像这样的方法graphics.drawEllipse(x, y, w, h).要绘制圆,您需要知道左上角坐标以及圆的宽度和高度.

我的API旨在让开发人员可以轻松地使用各种信息绘制形状,而无需进行大量的数学运算 - 这对于圆形来说是微不足道的,但对于其他形状则更为复杂.例如,您还应该能够根据其中心坐标和半径或左上角和右下角坐标绘制圆.

所以我有一个Circle类工厂方法,如:

Circle.createWithCenterAndRadius(cx, cy, r)
Circle.createWithBoundingBox(x1, y1, x2, y2)
Circle.createWithWidthAndHeight(x, y, w, h)
?那只是邪恶吗?

如果您要使用此API,那么这样的方法名称对您来说是否合适?您对如何使方法名称更加清晰有建议吗?

api naming-conventions

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

C++中的纯虚析构造函数

写错是不对的:

class A {
public:
    virtual ~A() = 0;
};
Run Code Online (Sandbox Code Playgroud)

对于抽象基类?

至少在MSVC中编译......它会在运行时崩溃吗?

c++ polymorphism destructor pure-virtual

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

如何正确实现配置模式(CA1063)

框架设计指南(第2版,第327页)说:

CONSIDER提供方法Close(),除了Dispose(),如果close是该区域的标准术语.

这样做时,重要的是使Close实现相同DisposeIDisposable.Dispose明确地考虑实现方法.

所以,按照提供的例子,我有这个类:

public class SomeClass : IDisposable {
    private SomeDisposable someInnerDisposable;

    public void Open() {
        this.someInnerDisposable = new SomeDisposable();
    }

    void IDisposable.Dispose() {
        this.Close();
    }

    public void Close() {
        this.Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing) {
        if (disposing) {
            this.someInnerDisposable.Dispose();
            this.someInnerDisposable = null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

FxCop似乎不喜欢这样:

CA1816:Microsoft.Usage:'SomeClass.Close()'调用'GC.SuppressFinalize(object)',这种方法通常仅在'IDisposable.Dispose'的实现中调用.有关更多信息,请参阅IDisposable模式.

CA1816:Microsoft.Usage:更改'SomeClass.IDisposable.Dispose()'以调用'GC.SuppressFinalize(object)'.这将防止对象一旦被处理并且已经超出范围而不必要地完成对象.

CA1063:Microsoft.Design:修改'SomeClass.IDisposable.Dispose()'以便它调用Dispose(true),然后在当前对象实例上调用GC.SuppressFinalize(在Visual Basic中为'this'或'Me'),然后回报.

CA1063:Microsoft.Design:将'SomeClass.IDisposable.Dispose()'重命名为'Dispose'并确保将其声明为public和sealed.

  • 如何正确地使用close方法实现dispose模式?

-要么-

  • 如何抑制警告?

我试过了

[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly",
    Justification = "Framework Design Guidelines say it's ok.")]
void IDisposable.Dispose() …
Run Code Online (Sandbox Code Playgroud)

c# fxcop

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

如何在.NET中开始创建应用程序API

在我工作的公司中,我们有一个用.NET开发的桌面应用程序,我们希望为其他软件开发人员开放一些部件.

我认为这就像其他软件可以访问的某种公共方法.是否有任何标准方法,最佳实践或其他经验?

我想你可以用Win32调用,C/C++编程等来做这件事.但我主要是一个.NET开发人员,并且有多年的编程经验,主要是VB.NET,还有一些C#.我希望在.NET中找到一种方法.但它应该可以访问其他语言开发的软件.

最好的问候/马格努斯

.net c# vb.net api

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

IE的jQuery UI对话问题

我正在使用新的jQuery 1.3.2和jQuery-ui-1.7库以及UI对话框.我有一个div标签,里面有几个表单元素(文本框,复选框等).在页面加载时,jQuery将div显示为对话框.这在FF中工作得非常好,但在IE中,div的高度是错误的.它只是显示标题栏的一些内容.我在创建div时明确设置了高度.如果在打开对话框后设置高度选项,则会更正高度,但内容为空(显示文本框的前三分之一).如果我允许对话框可调整大小,如果你在IE中调整它的大小它工作正常,但我不想强迫IE用户调整大小只是为了看到内容.有任何想法吗?这是我用来创建对话框的代码:

$('#dialogDiv').dialog({ 
    bgiframe: true, 
    height: 400, 
    width: 620, 
    modal: true, 
    draggable: true, 
    resizable: false, 
    close: function(event, ui) {
        if($('#agree').val() != '1')
            location.href = 'somepage.html';
    }
});
Run Code Online (Sandbox Code Playgroud)

internet-explorer jquery-ui modal-dialog

26
推荐指数
3
解决办法
6万
查看次数

Bash历史记录重新运行:可能的命令,以避免使用!爆炸!?

场景:

你正在做你的每日Bash shell的东西.您想要运行上一个命令,因此键入:

history | grep foocommand
Run Code Online (Sandbox Code Playgroud)

然后,您会得到一份列表,其中包含foocommand您为历史记录保留的所有内容所做的所有内容,如下所示:

  585 foocommand --baz --bleet
  750 foocommand | grep quux
  987 history grep | foocommand
Run Code Online (Sandbox Code Playgroud)

您决定要运行命令585,因此键入

  !585
Run Code Online (Sandbox Code Playgroud)

问题:只是出于好奇,有没有办法让最后一步走出这个等式并仍然得到预期的结果?如果有办法说出来会很好:

 "grep through history and automatically run the first item on the list"
Run Code Online (Sandbox Code Playgroud)

要么

"grep through history and let me choose which item to run using the arrow keys"
Run Code Online (Sandbox Code Playgroud)

bash shell scripting grep history

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

语言词汇应该有多大?

我今天开始研究即将推出的C++ 0x规范,并开始考虑语言词汇的正确大小.最初,让我感到非常烦恼的是引入了新的关键字.在一些粗略的层面上,我认为语言中关键词的数量是对其复杂性的估计.也就是说,在C++的情况下,添加新构造会使得掌握语言变得更加困难.这就是为什么K&R书比C++等同的小得多的一个原因.

在那之后,我想到了自然语言,它的词汇量随着时间的推移呈线性增长,无论语言如何(*).当然,唯一的例外是Newspeak,它说了很多.在这种情况下,词汇量大小与语言的表达能力有关.

但是,在编程语言中,您可以使用具有较小词汇量的非常富有表现力的语言(即Lisp).

所以,用短语来表达这个问题,在您看来,语言词汇应该是什么 - 大而冗长或小而简洁?

language-agnostic

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