Шаблонная функция C ++, которая может принимать Eigen :: vector или std :: vector - PullRequest
0 голосов
/ 06 мая 2018

Я использовал std :: vector в своей программе, и теперь я понял, что Eigen :: VectorXd значительно облегчит мою задачу. Поэтому я перешел на использование Eigen. Но я не хочу полностью менять программу, поэтому подумал об использовании шаблонов для некоторых ранее определенных функций.

Я новичок в C ++, и программирование шаблонов немного сбивает с толку. Я не могу думать за пределами приведенной ниже программы, что неправильно.

using namespace Eigen;
template<class T>
T getvec(T& var)
{
    T res;
    res[0] = var[0]*3;
    res[1]=var[1]*3;
     res[2]=var[2]*3;
    return res;
}

int main(){


    std::vector<double> a(3,1);
    Eigen::VectorXi b(3);
    b.setOnes();

     auto x= getvec(a);
    auto y=getvec(b);
    }

Можно ли написать шаблонную функцию, которая может принимать std :: vector или Eigen :: VectorXd в качестве параметров?

Мне нужна функция, описанная ниже, которая может принимать оба типа.

std::vector<double> getTransform(std::vector<double>& vec)
{
     std::vector<double> res;
     res[0] = vec[0]*3.14;
     ...........
     ...........
     return  res;
}

1 Ответ

0 голосов
/ 06 мая 2018

Попробуйте это:

template <typename T>
T  getTransform(const T& vec)
{
    T res;
    res.resize(vec.size());
    for (size_t i = 0; i < size_t(vec.size()); ++i)
    {
        res[i] = vec[i]*3.14;
    }
    return  res;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...