小编Amm*_*ain的帖子

指针作为地图C++ STL中的键

我有一个问题,当在地图中用作键时,如何处理指向自定义对象的指针.更具体地说,如果我定义

std::map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)

默认的C++实现是否可以处理这些指针?或者我是否需要定义自定义比较器函数来处理它?通常,使用指向对象的指针作为键是一种好习惯吗?

c++ pointers stl map

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

如何在C++编译时应用if

我试图编写一个通用static_for实现,可以接受边界,增量函数和比较函数来运行循环.我一直在使用这个构造,其中简单的循环增加1.在这种情况下,通过简单地专注于IDX & END相等而很容易停止循环展开.

但是,当增量可以是任意整数时,不能保证IDX & END总是相等.该if条件仅在运行时计算.在下面的代码片段中,我试图专注于std::false_type停止递归.通过评估std::less函数(可以由用户替换任何其他评估)来构造integral_constant .不幸的是,此comparator功能也仅在运行时进行评估,因此编译器失败.有人可以建议如何使这个工作?

注意:使用C++ 11.

template <int idx, int end, typename eval, int count, typename comparator>
struct static_for_loop {
  template <typename Lambda, typename... Args>
  void operator()(const Lambda& function, Args... args) const {
    if (comparator()(idx, end)) {
      std::integral_constant<int, idx> i;

      function(i, args...);

      constexpr bool lesser = comparator()(idx + count, end);
      static_for_loop<idx + count, end, std::integral_constant<bool, lesser>, count,
                      comparator>()(function, args...);
    }
  }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming

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

将指针散列为C++ STL中unordered_map的键

我张贴了类似的quetion使用在C++ STL地图指针作为键就.当用作Keys时,指针如何在unordered_maps中进行哈希处理.更具体地说,如果我定义:

std::unordered_map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)

默认的C++ std :: hash实现是否可以处理这些指针?使用安全吗?这是好习惯吗?

c++ hash stl unordered-map

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

使用Eigen Vector3d容器创建PCL点云

我正在尝试生成PCL点云.我所有的点都在以下容器类型中:

std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> >
Run Code Online (Sandbox Code Playgroud)

我想创建一个指向PCL点云的指针:

pcl::PointCloud<pcl::PointXYZ>::Ptr pc 
Run Code Online (Sandbox Code Playgroud)

创建此点云的最有效方法是什么?

eigen point-cloud-library

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

将额外参数传递给 Waf 脚本

我正在为我的项目使用 Waf 构建系统。我的项目中有一些依赖项,我并不总是希望链接和编译它们。我想知道是否有一种方法可以将额外的参数传递给 Waf 配置和 Waf 安装脚本,我可以在 wscript 中读取这些参数并确定是否需要编译某些可执行文件?

waf

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

Qt中的信号槽执行是否并行化?

我在处理信号和插槽的方式上有一个基本的Qt问题.我对框架很新,所以请原谅我,如果这听起来很愚蠢.我想知道我是否有某些信号连接到某些插槽.

signal1() ---> slot1(){ cout <<"a"; }
signal2() ---> slot2(){ cout <<"b"; }
signal3() ---> slot3(){ cout <<"c"; }
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我打电话

emit signal1();
emit signal2();
emit signal3();
Run Code Online (Sandbox Code Playgroud)

Qt是否保证在屏幕上打印出"abc",换句话说,顺序处理插槽?或者它会产生一个单独的线程来执行每个插槽?谢谢!

qt multithreading signals-slots

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

用于元编程的C++ STL功能等价物

是否有用于元编程的STL功能和其他库的constexpr或其他编译时间等价物?更具体地说,我正在尝试编写一些使用SFINAE来评估某些条件并生成相应类型的元程序.例:

template<int A, int B>
enable_if_t<(A < B)> my_func() {// do something 
}

template<int A, int B>
enable_if_t<!(A < B)> my_func() {// do nothing 
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望用户能够传入比较器(如std::less<int>),而不是硬编码<.所以类似于:

template<int A, int B, class comp = std::less<int>>
enable_if_t<comp(A, B)> my_func() {// do something 
}

template<int A, int B, class comp = std::less<int>>
enable_if_t<comp(A, B)> my_func() {// do nothing 
}
Run Code Online (Sandbox Code Playgroud)

但是,由于函数对象不是常量表达式,因此在编译时不会对它们进行求值,因此这不起作用.实现这样的事情的正确方法是什么?

c++ templates std sfinae c++11

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