小编Edi*_*enz的帖子

如何独立测量所用机器的性能

我有一个表现良好的例程.但是,我不得不改变它.这种改变提高了程序的精确度但却损害了性能.

例程是大量的数学计算,可能是CPU绑定(我仍然需要对此进行更严格的测试,但我99%肯定).它是用C++编写的(编译器是Borland C++ 6).

我现在想测量一下例程的性能,首先我考虑测量执行时间,但在我看来这是一种有缺陷的方法,因为可能会有更多的事情发生.

然后我讨论了这个主题:测量应用程序性能的技术 - Stack Overflow.我喜欢通过MFlops测量的想法.

我的老板建议尝试通过cpu时钟周期进行某种测量,因此测试将与机器无关,但是,我认为这种方法属于MFlops测试.

在我看来,衡量两件事(执行时间和MFlops)是要走的路,但我想听听stackoverflow专家你们的想法.

测量CPU绑定例程性能的方法是什么?

c++ performance profiler

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

删除了添加到TortoiseSVN但未提交的文件

我正在使用TortoiseSVN.

在我的项目中,我创建了一个目录,在其上放置文件,将所有内容添加到SVN源代码控制但尚未将其提交到存储库.它看起来像这样:

/root_project_dir
-> .svn
-> dir1
  -> .svn
-> added_dir
  -> .svn
  -> subdir
Run Code Online (Sandbox Code Playgroud)

但我错误地删除了常规Windows删除.现在,如果我再次创建目录,我无法将其添加到TortoiseSVN,它说:

包含工作副本管理区域的"目录'.../added_dir/.svn'缺失.请执行"清理"命令.

好的,但是当我运行"清理"命令时,我得到了这个:

".../added_dir"不是工作副本目录.

我尝试删除目录,进行清理,再次创建,但无法成功.

如何将此目录再次添加到版本控制中?

svn version-control tortoisesvn

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

我需要在c ++中创建一个简单的回调?我应该使用boost :: function吗?

假设我有一些像这样的代码:

class Visitor {
   public:
      Visitor(callBackFunction) {}
      void visit() {
          //do something useful
          invokeCallback();
      }
}

class ClassThatCanBeVisited {
    Visitor &visitor;

    public:
       ClassThatCanBeVisited(Visitor &_visitor) : visitor(_visitor){}
       void someUsefulMethod() {
          int data= 42;
          visitor.visit(data);
       }
};


void callBackFunction() {
    //do something useful in the context of the Main file
}
int main() {
     Visitor visitor;
     ClassThatCanBeVisited foo(visitor);
     foo.someUsefulMethod();
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个简单的回调,只要调用Visitor :: visit(),就会调用它.我知道我可能应该将回调代码放在我的访问者中,但是它位于不同的上下文中,所以我想将callBackFunction()传递给Visitor,这样他就可以调用我的回调函数了.

我在网上查找了东西并看到了boost :: function,但是c ++已经有了基本的函子.

我应该使用哪一个更清晰的代码?回调将是一个简单的void()函数,但它可能会增长,你永远不会知道未来:)

建议的方法是什么?

c++ boost callback functor

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

获取模板类型作为字符串

在阅读了使用Boost.MPL的C++编译时字符串哈希,并考虑到我遇到的问题之后,我想到了以下内容.

我有基类:

template<class Command>
class Base {
  typedef Command CommandType;
}
Run Code Online (Sandbox Code Playgroud)

它应该是Commands类的实用程序基类,因此它们不需要自己定义和声明某些成员,它们只是从它们引用的类型继承Base.所以他们可以像这样使用:

class CommandInstantiatorA : public Base<CommandA>
{
public:
   static std::string GetID() { return "CommandInstantiatorA "; }
}
Run Code Online (Sandbox Code Playgroud)

但是,还有另一种方法(GetID)我无法"模板化",它通过应用程序返回一个唯一的ID.我希望能够散列传递给类Base的类型,因此其他类只需要指定类型.像这样的东西:

template <class Base>
class Base {
   typedef boost::hash_value(TO_STRING(Base)) ID; //should also be read as: typedef boost::hash_value("CommandA") ID;
   ...
}
Run Code Online (Sandbox Code Playgroud)

是否有这样的宏(TO_STRING)会在最后一个示例中产生结果"CommandA".Boost.MPL中有什么可以做到的吗?

c++ boost metaprogramming

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

使用find_if和isalnum在字符串中查找字母数字字符

我正在使用g ++ 4.7.

我想要做的就是这个,

find_if(s.begin(), s.end(), isalnum);
Run Code Online (Sandbox Code Playgroud)

其中isalnum在所定义cctype并且s是一个字符串.

logman.cpp:68:47: error: no matching function for call to ‘find_if(std::basic_string<char>::const_iterator, std::basic_string<char>::const_iterator, <unresolved overloaded function type>)’
Run Code Online (Sandbox Code Playgroud)

但是,这有效,

bool my_isalnum(int c) {
    return isalnum(c);
}

find_if(s.begin(), s.end(), my_isalnum);
Run Code Online (Sandbox Code Playgroud)

如何在不创建自己的功能的情况下使其工作?

c++ string stl g++

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