小编gcv*_*gcv的帖子

为什么C++ 11没有隐式地将lambda转换为std :: function对象?

我实现了一个通用事件发射器类,它允许代码注册回调,并使用参数发出事件.我使用Boost.Any类型擦除来存储回调,以便它们可以具有任意参数签名.

这一切都有效,但由于某种原因,传入的lambdas必须首先变成std::function对象.为什么编译器不推断lambda是函数类型?是因为我使用可变参数模板的方式吗?

我使用Clang(版本字符串:) Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn).

码:

#include <functional>
#include <iostream>
#include <map>
#include <string>
#include <vector>

#include <boost/any.hpp>


using std::cout;
using std::endl;
using std::function;
using std::map;
using std::string;
using std::vector;


class emitter {

   public:

      template <typename... Args>
      void on(string const& event_type, function<void (Args...)> const& f) {
         _listeners[event_type].push_back(f);
      }

      template <typename... Args>
      void emit(string const& event_type, Args... args) {
         auto listeners = _listeners.find(event_type);
         for (auto l : listeners->second) {
            auto lf …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates template-function c++11

15
推荐指数
2
解决办法
2276
查看次数

有没有办法使术语模式中的区域遵守换行?

当使用term模式导数(如ansi-termmulti-term)时,我经常想选择一个区域并将其复制到其他地方。如果该区域包括一条在终端窗口边缘处换行的线,则将该区域粘贴到另一个缓冲区中时,总是在换行的位置插入一个硬换行符term。这意味着我经常不得不返回并清理粘贴的文本。有办法避免这样做吗?我都尝试term-line-modeterm-char-mode; 两者都做同样的事情。

我不想编写一个剥离所有换行符的猛勾,因为我想在原始内容中保留现有的硬换行符。

emacs terminal-emulator

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

如何关闭 Clang++ 中的_所有_优化?

我正在尝试调试一些 C++11 代码,而 LLDB 没有帮助。代码大致如下:

void f(my_type dt) {
   try {
      g(h(dt));
   }
   catch ( /* reasonable exception type here */ ) {
   }
}
Run Code Online (Sandbox Code Playgroud)

当我在该行上放置断点时g(h(dt)),LLDB 坚持认为 的值dt不可用。它肯定不能被忽略,因为它用于实现h某些数据库查询的输入。

我使用 CMake,它使用以下标志进行编译:

CXX_FLAGS = -g -O0 -fPIC -std=c++11 -stdlib=libc++ -Wall
Run Code Online (Sandbox Code Playgroud)

我确认(使用make VERBOSE=true)这些标志确实用于构建项目。据我所知,应包含完整的调试信息并关闭所有优化。事实显然并非如此。我还可以添加哪些其他标志来强制 Clang 保持所有参数和变量在整个调用堆栈中可用?

不幸的是,使用小文件和函数的小测试用例不会重现此问题:大多数时候,变量会按我的预期保留。

我正在运行 Yosemite 的 Mac 上工作。

$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

debugging optimization lldb c++11 clang++

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