Skip to content

Instantly share code, notes, and snippets.

@lambday
Created November 11, 2016 16:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lambday/2c67201d6e75c2aa8e10e5eb344df2b4 to your computer and use it in GitHub Desktop.
Save lambday/2c67201d6e75c2aa8e10e5eb344df2b4 to your computer and use it in GitHub Desktop.
[lambday@lambday.iitb.ac.in saurabh]$ g++ -std=c++14 -O3 -w eigen_sqrt.cpp -I/usr/include/eigen3
[lambday@lambday.iitb.ac.in saurabh]$ ./a.out
default ctor called.
default ctor called.
default ctor called.
default ctor called.
default ctor called.
default ctor called.
Task 1
initializer ctor called.
assignment operator called.
initializer ctor called.
assignment operator called.
initializer ctor called.
assignment operator called.
initializer ctor called.
assignment operator called.
initializer ctor called.
assignment operator called.
initializer ctor called.
assignment operator called.
default ctor called.
default ctor called.
default ctor called.
default ctor called.
default ctor called.
default ctor called.
assignment operator called.
assignment operator called.
assignment operator called.
assignment operator called.
assignment operator called.
assignment operator called.
0 0 0
0 0 0
#include <iostream>
#include <memory>
#include <Eigen/Eigen>
using std::cout;
using std::endl;
using std::make_unique;
using std::unique_ptr;
using Eigen::Matrix;
using Eigen::Dynamic;
using Eigen::Map;
template <typename T>
struct Type
{
Type() : _value(static_cast<T>(0)) { cout << "default ctor called." << endl; }
Type(T value) : _value(value) { cout << "initializer ctor called." << endl; }
Type(const Type& other) : _value(other._value) { cout << "copy ctor called." << endl; }
Type& operator=(const Type& other)
{
_value = other._value;
cout << "assignment operator called." << endl;
return *this;
}
operator T()
{
return _value;
}
operator const T() const
{
return _value;
}
T _value;
};
int main()
{
auto mapped_mem = make_unique<Type<double>[]>(2*3);
Map<Matrix<Type<double>, Dynamic, Dynamic>> map(mapped_mem.get(), 2, 3);
cout << "Task 1" << endl;
map = map.array().sqrt();
cout << map << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment