简体   繁体   English

C ++中用于增强矩阵的模板化函数

[英]Templated functions for boost matrices in C++

I require a function to print out the elements of a vector in a format that I'd like to see. 我需要一个函数以我希望看到的格式打印出向量的元素。 As of now, I have separate functions for vector<double> and vector<std::complex> , as follows: 到目前为止,我对vector<double>vector<std::complex>具有单独的函数,如下所示:

void printvd(boost::ublas::vector<double> V) {
    for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}
void printvc(boost::ublas::vector<std::complex> V) {
    for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}

I've tried templating with, 我试着用

template<typename T>
void printv(boost::ublas::vector<T > V) {
    for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}

but any calls (like printv<double>(V); ) invariably ends up with an undefined reference error. 但是任何调用(例如printv<double>(V); )总是以未定义的引用错误结束。

I am facing similar issues with matrices too - any help would be appreciated. 我在矩阵方面也面临类似的问题-任何帮助将不胜感激。 It would also be good if somebody could quip in about how to make use of matrix expressions in boost. 如果有人可以开玩笑地讨论如何在boost中使用矩阵表达式,那也将是一件好事。

Please make sure you can compile this very basic example, where all paths&includes should be resolved. 请确保您可以编译此非常基本的示例,在该示例中应解决所有路径和包含内容。

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <complex>

using std::cout;
using std::endl;

void printvd(boost::numeric::ublas::vector<double> V) {
    for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}
void printvc(boost::numeric::ublas::vector<std::complex<double>> V) {
    for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}

template<typename T>
void printv(boost::numeric::ublas::vector<T > V) {
  for( int i=0;i<V.size();i++ )
      std::cout << V(i) << " ";
}

int main(int argc, char *argv[])
{
  boost::numeric::ublas::vector<double> testVector1;
  boost::numeric::ublas::vector<std::complex<double>> testVector2;

  printv(testVector1);
  printv(testVector2);
  return 0;
}

And corresponding CMakeLists.txt: 以及相应的CMakeLists.txt:

project(boost_vector_test)
cmake_minimum_required(VERSION 2.8)
add_executable(${PROJECT_NAME} main.cpp)

Otherwise boost has good documentation with examples how to use matrix expressions: http://www.boost.org/doc/libs/1_63_0/libs/numeric/ublas/doc/matrix_expression.html 否则,boost会提供有关如何使用矩阵表达式的示例的良好文档: http : //www.boost.org/doc/libs/1_63_0/libs/numeric/ublas/doc/matrix_expression.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM