小编Chr*_*ger的帖子

从OpenCV FeatureDetector中检索要素类型

在OpenCV中,cv::FeatureDetector通过提供功能的名称来创建a是很常见的:

cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("SURF");
Run Code Online (Sandbox Code Playgroud)

这是一个工厂模式,是cv::FeatureDetector一个抽象类.

然后,给定一个类型的变量cv::Ptr<cv::FeatureDetector>,是否可以检索该功能的名称?这是"SURF"我的例子.

c++ opencv

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

malloc和new返回一个int对齐的地址吗?

在我之前提出的与按位操作有关的问题中,我被告知,如果数组没有与地址对齐,那么访问char带有int指针的数组的代码(一次操作更大的字节块)可能会有问题.charint

然后,在C中思考,我想知道malloc为未知类型分配内存时会发生什么.例如,如果我这样做void *p = malloc(sizeof(int));,我是否获得有效的char/int/long-aligned内存地址?

根据SO中引用标准的一些答案,"返回的指针应适当对齐,以便可以将其转换为任何完整对象类型的指针".

因此,我明白,我可以去char*int*,在这种情况下没有问题:

char *p = malloc(16);
int *n = (int*)p; // use n a base of an array of 16 / sizeof(int) ints
Run Code Online (Sandbox Code Playgroud)

这是对的吗?

转向C++,似乎标准中出现了相同的规则.那么,如果我这样做,我可以假设没有对齐风险吗?

char *p = new char[16];
int *n = reinterpret_cast<int*>(p);
Run Code Online (Sandbox Code Playgroud)

c c++ pointers

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

CMake找到包文件,配置文件是如何使用的?

我有一个使用第三方库(我们称之为somelib)的项目,我为其编写了一个 cmake 文件来搜索它。

这是somelibConfig.cmake我编写并放入的文件/usr/local/lib/cmake/somelib/

FIND_LIBRARY(somelib_LIBRARY somelib
    PATHS /usr/local/lib
    NO_DEFAULT_PATH
)
SET(somelib_LIBRARIES ${somelib_LIBRARY})
FIND_PATH(somelib_INCLUDE_DIR somelib.hpp
    PATHS /usr/local/include/somelib
    NO_DEFAULT_PATH
)
SET(somelib_INCLUDE_DIRS ${somelib_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)

然后,如果我find_package(somelib REQUIRED)这样做,效果就很好。

但是,如果我移动并重命名somelibConfig.cmakemyproject/CMakeModules/Findsomelib.cmake(此目录被添加到CMAKE_MODULE_PATH),在find_package我看到变量somelib_INCLUDE_DIRSsomelib_LIBRARY已正确填充后,但未somelib_FOUND设置(即使如此,find_package也不会中止编译)。

*Config.cmake对于 a 有效吗Find*.cmake

怎么可能除了这个变量之外的所有变量都*_FOUND被设置了呢?

如果未设置,为什么不find_package中止REQUIRED编译?*_FOUND

cmake

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

在函数声明中演绎shared_ptr T.

我想写一个看起来像这样的函数:

template<class T>
void Foo(const std::shared_ptr<const T>& ptr);
Run Code Online (Sandbox Code Playgroud)

所以我可以这样称呼它:

std::shared_ptr<int> ptr;
Foo(ptr);
Run Code Online (Sandbox Code Playgroud)

但是,编译器无法推断T,我必须明确它:

Foo<int>(ptr);
Run Code Online (Sandbox Code Playgroud)

或者用它重载void Foo(const std::shared_ptr<T>& ptr).

我可以有一个单一的声明Foo,const T以便T可以推断出来吗?

c++ templates shared-ptr c++11

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

如何从 OpenCV FileNode 映射中检索键值对?

我使用 OpenCV FileStorage 将地图存储在 yaml 文件中,如下所示:

cv::FileStorage fs("file.yaml.gz", cv::FileStorage::WRITE);
std::string somekey = ...;
double someval = ...;
fs << "mymap" << "{:" << somekey << someval << "}";
Run Code Online (Sandbox Code Playgroud)

现在,我想取回数据,但我不知道地图的键。我想代码应该是这样的:

cv::FileStorage fs("file.yaml.gz", cv::FileStorage::READ);
cv::FileNode fn = fs["mymap"];
// fn has type == cv::FileNode::MAP
// fn has size == 1 element (one pair)
// fn[0] returns also a MAP with 1 element
Run Code Online (Sandbox Code Playgroud)

是否可以在没有密钥的情况下获得该地图的所有对?我已经检查过cv::FileNodeIterator,但似乎没有解决这个问题。C 接口CvFileNode允许在提供密钥后检索值。

c++ opencv file-storage

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

检查模板参数是否是某种类型的chrono :: duration

特定

template<class T>
struct TimeData
{
  T duration;
}
Run Code Online (Sandbox Code Playgroud)

static_assert如果T是某种类型的,我如何编写一个检查编译时间std::chrono::duration?记住std::chrono::duration是一个模板类.

换句话说,我如何检查类型是否是模板类的实例化?

c++ c++11

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

修改shared_ptr上的std :: less

这就是我所拥有的:

struct Foo {
  int index;
}
std::set<std::shared_ptr<Foo>> bar;
Run Code Online (Sandbox Code Playgroud)

我想bar通过它们的索引来命令元素,而不是通过std::less<std::shared_ptr<T>>与指针相关的默认函数来命令它们.

我读过我可以输入std::set<std::shared_ptr<Foo>, std::owner_less<std::shared_ptr<Foo>>> bar,但我更喜欢坚持以前的语法.

我试过定义std::less<std::shared_ptr<Foo>>,但它实际上并没有被set函数使用.有没有办法实现这个目标?

c++ stl c++11

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

在编译时获取std :: bind的类型

如何获取std::bind表达式的类型以将其存储在类成员中?例如,我有这个:

template<class F, class ...Args>
void foo(F&& funct, Args&&... args) {
  typedef decltype(std::bind(funct, std::forward<Args>(args)...)) T;
  T bar = std::bind(funct, std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)

但我想将其转换为:

template<class F, class ...Args>
class Foo {
  void foo(F&& funct, Args&&... args) {
    bar = std::bind(funct, std::forward<Args>(args)...);
  }
  T bar;  // what is the type of bar?
}
Run Code Online (Sandbox Code Playgroud)

c++ bind c++11

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

标签 统计

c++ ×7

c++11 ×4

opencv ×2

bind ×1

c ×1

cmake ×1

file-storage ×1

pointers ×1

shared-ptr ×1

stl ×1

templates ×1