小编Gab*_*iel的帖子

Eigen和boost :: serialize

我试着编写一个通用的序列化函数,它接受任何密集矩阵并将其序列化:其他一些有帮助但不是最终的问题 在这里: Question1 Question2

我尝试了以下哪些应该有效:

namespace boost {
namespace serialization {
    template<class Archive, typename Derived> void serialize(Archive & ar,  Eigen::EigenBase<Derived> & g, const unsigned int version)
    {
        ar & boost::serialization::make_array(g.derived().data(), g.size());
    }
    }; // namespace serialization
}; // namespace boost
Run Code Online (Sandbox Code Playgroud)

当我尝试序列化时 Eigen::Matrix<double,4,4>

Eigen::Matrix<double,4,4> a; 
boost::serialize(ar, a);
Run Code Online (Sandbox Code Playgroud)

编译器可能以某种方式与上面的模板不匹配?并给出以下错误:

/usr/local/include/boost/serialization/access.hpp|118|error:'class Eigen :: Matrix'没有名为'serialize'的成员

c++ serialization templates boost eigen

8
推荐指数
3
解决办法
5027
查看次数

用大括号从double初始化float

为什么编译器(clang,gcc)在执行此操作时没有警告缩小转换

float a{3.1231231241234123512354123512341235123541235};
float a = {double(3.1231231241234123512354123512341235123541235)}
Run Code Online (Sandbox Code Playgroud)

我期待一个警告,因为我使用大括号进行显式值初始化.按照这个答案链接它应该吐出一个错误.

汇编在这里

c++ value-initialization c++11 list-initialization c++14

8
推荐指数
2
解决办法
1013
查看次数

模板忽略了const(为什么?)

有人知道,为什么这个编译?

template< typename TBufferTypeFront, typename TBufferTypeBack = TBufferTypeFront>
class FrontBackBuffer{

public:


  FrontBackBuffer(
    const TBufferTypeFront  front, 
    const TBufferTypeBack back):    ////const reference  assigned to reference???
     m_Front(front),
     m_Back(back)
  {
  };

  ~FrontBackBuffer()
  {};

  TBufferTypeFront m_Front;       ///< The front buffer
  TBufferTypeBack m_Back;         ///< The back buffer

};

int main(){
    int b;
    int a;
    FrontBackBuffer<int&,int&> buffer(a,b); //
    buffer.m_Back = 33;
    buffer.m_Front = 55;
}
Run Code Online (Sandbox Code Playgroud)

我用GCC 4.4编译.为什么它甚至让我编译这个?不应该有一个错误,我不能将const引用分配给非const引用吗?

c++ templates constructor const default-constructor

7
推荐指数
3
解决办法
195
查看次数

多边形blob的中心线(二进制图像)

我有一个蠕虫的二进制图像(blob提取效果很好).我有兴趣在吹气(蠕虫)上安装中心线.

到目前为止我想出了这个:从多边形开始(在图像中轮廓提取blob之后)我应用了voronoi计算并丢弃了多边形之外的所有顶点(蓝色),这给了我黑色的中心线,我可以进一步用于适合平滑的中心线.

然而,这个计算并不是完全可靠的(因为去除不在多边形内部的voronoi顶点?)是否有人知道算法工作流程以获取多边形的中心线或blob对象的中心线(二进制图像).(骨架化?,使用内边缘的中点对多边形进行三角剖分)

这是一个演示:

在此输入图像描述

python voronoi polygon curve-fitting computational-geometry

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

为什么不存在void {}?

我想知道为什么void()是prvalue voidvoid{}不存在......?请参阅以下答案:https://stackoverflow.com/a/37708167/293195

例如在上下文中:

template<typename R>
R foo(){
 return R{};
}
Run Code Online (Sandbox Code Playgroud)

c++ c++17

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

结构内部允许静态断言吗?

我有几个模板设置结构,可以在这些结构中使用静态断言吗?

template<typename T, int N, (and so on...)>
struct Settings{
  static const int n = N;
  STATIC_ASSERT(n == 5);
  typedef typename T GAGA;
}
Run Code Online (Sandbox Code Playgroud)

感谢您的回复!

c++ static-assert

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

产生32位,64位和128位的交织位模式(morton密钥)

我想生产一个32位,64位和128位的morton密钥,具有最佳代码!解决方案是什么?

c++ python algorithm bit-manipulation z-order-curve

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

理解std :: function的模糊模板参数

std::function有一个模板参数:

template< class R, class... Args >
class function<R(Args...)>
Run Code Online (Sandbox Code Playgroud)

我想知道,什么类型R(Args...),我认为它既不是函数指针 T:

template<class R, typename... Args>
using T = R(*)(Args...);
Run Code Online (Sandbox Code Playgroud)

也不是功能参考 Q:

template<class R, typename... Args>
using Q = R(&)(Args...);
Run Code Online (Sandbox Code Playgroud)

所以类型 P

template<class R, typename... Args>
using P = R(Args...);
Run Code Online (Sandbox Code Playgroud)

只是一个功能.

我可以声明这样一个函数并通过以下方式调用它:

int main(){
  P<int,int> myFunc;
  myFunc(3);
}
Run Code Online (Sandbox Code Playgroud)

因为myFunc从未定义过,所以不会编译.如果这是正确的,我在哪里可以找到有关此类型功能的更多信息?

c++ c++11

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

模式匹配如何在C++中用于模板参数推导

我在阅读函数规范的模板参数推导时有点迷失.

我正在寻找模式匹配如何工作的一些见解.例如:

template <typename T>
void foo(T& t);
//       **--------P (T&)

const int& a = ...;
foo(a);
//  *----- A (const int&)
Run Code Online (Sandbox Code Playgroud)

如下面的答案所指出:

(ⅰ)如果A是一个参考,则忽略所述参考部分(II),然后模式匹配AP来确定T.

但它是如何完成的并且是否有效.我参考这一:

如果P具有包括模板参数列表<T><I>的形式之一,则该模板参数列表的每个元素Pi与其A的对应模板参数Ai匹配.如果最后一个Pi是包扩展,则将其模式与A的模板参数列表中的每个剩余参数进行比较.

这对我来说完全不清楚......

c++ c++17

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

CMake 未在 macOS 上添加完整的 RPATH

我有以下 MWE,其中 Conan 用于安装fmt库(共享)。

cmake_minimum_required(VERSION 3.21)
project(Test CXX)

set(CMAKE_MACOSX_RPATH ON)
set(CMAKE_CXX_STANDARD 17)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})

if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
  message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
  file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
                "${CMAKE_BINARY_DIR}/conan.cmake"
                EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
                TLS_VERIFY ON)
endif()

include(${CMAKE_BINARY_DIR}/conan.cmake)

conan_cmake_configure(REQUIRES fmt/6.1.2
                      OPTIONS fmt:shared=True
                      GENERATORS cmake_find_package)

conan_cmake_autodetect(settings)

conan_cmake_install(PATH_OR_REFERENCE .
                    BUILD missing
                    REMOTE conancenter
                    SETTINGS ${settings})

find_package(fmt)

add_executable(main main.cpp)
target_link_libraries(main fmt::fmt)
Run Code Online (Sandbox Code Playgroud)

当我检查可执行文件时,otool -l main我发现该fmt库没有绝对路径,这是我希望发生的情况。因此,executbale 也无法运行,因为它找不到libfmtd.6.dylib.

问题是,这里设置错误是什么?为什么可执行文件中没有编码完整路径?

输出otool

cmake_minimum_required(VERSION 3.21)
project(Test CXX)

set(CMAKE_MACOSX_RPATH ON)
set(CMAKE_CXX_STANDARD 17) …
Run Code Online (Sandbox Code Playgroud)

c++ rpath cmake

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