Move function outside class definition

Tom de Geus

I am trying to enhance the readability of my library which features a matrix class. In particular I want users to get a direct overview when looking at the class definition. Therefore I am moving the actual functions outside of the definition. However, I appear to be unsuccessful for the copy constructor. In particular I don't succeed to define the templates correctly.

A minimal example (featuring the functions outside the class definition) is the following:

#include <vector>

template<class X>
class matrix
{
private:
  std::vector<X> m_data;

public:
  matrix(){};
  matrix(size_t n);
  X& operator[](size_t i);
  size_t size();

  template<\
    typename U,typename V=X,\
    typename=typename std::enable_if<std::is_convertible<X,U>::value>::type\
  >
  operator matrix<U> ()
  {
    matrix<U> out(size());

    for ( size_t i = 0 ; i < size() ; ++i )
      out[i] = static_cast<U>( m_data[i] );

    return out;
  }

};

template<class X>
matrix<X>::matrix(size_t n)
{
  m_data.resize(n);
}

template<class X>
X& matrix<X>::operator[](size_t i)
{
  return m_data[i];
}

template<class X>
size_t matrix<X>::size()
{
  return m_data.size();
}

int main()
{
  matrix<double> A(3);

  matrix<int> B = A;
}
Massimiliano Janes

Assuming your question refers to the conversion operator template ( you only have the implicit copy costructor there ), the syntax to move out a member template requires the specification of both template-parameters ( class first, without defaults ), hence:

template<class X>
template<typename U,typename V,typename E>
matrix<X>::operator matrix<U> ()
{
  //...

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Move method definition for template nested class outside declaration

From Java

Definition of a function outside of a generic class is producing a compilation error

From Dev

Python function assignment outside class definition causes argument exception

From Dev

Calling a React function PropType from outside the class definition

From Dev

Partial Template specialization definition outside of class definition

From Dev

Partial Template specialization definition outside of class definition

From Dev

friend not allowed outside of a class definition

From Dev

Variable assignment outside class definition

From Dev

In template class member function body outside class definition, when are template parameters required?

From Dev

declaration of templated function (over container type) inside class and definition of it outside a template class over container type-

From Dev

inner class method definition outside of a template class

From Dev

How do I define a template member function outside of a full specialized template class's definition?

From Dev

How do I define a template member function outside of a full specialized template class's definition?

From Dev

'super' outside of function or class

From Dev

@staticmethod or function outside class?

From Dev

static_assert inside/outside class definition

From Dev

TypeScript - How to add a method outside the class definition

From Dev

Reference instance method outside class definition

From Dev

TypeScript - How to add a method outside the class definition

From Dev

Run function with class and outside class

From Dev

How to 'return' outside function definition in typescript

From Dev

Move @AnalyzerDef Analyzer definition into a separated class

From Dev

Why we declare static variable in a class & the definition in outside of the class?

From Dev

Define operator[]() (array subscription) for template class outside of class definition

From Dev

outside definition of member class of an explicitly specialized member class

From Dev

Can't move variables outside of a function

From Dev

Overriding a function outside its class

From Dev

Error defining function outside the class

From Dev

Filing a vector outside of a function in a class

Related Related

  1. 1

    Move method definition for template nested class outside declaration

  2. 2

    Definition of a function outside of a generic class is producing a compilation error

  3. 3

    Python function assignment outside class definition causes argument exception

  4. 4

    Calling a React function PropType from outside the class definition

  5. 5

    Partial Template specialization definition outside of class definition

  6. 6

    Partial Template specialization definition outside of class definition

  7. 7

    friend not allowed outside of a class definition

  8. 8

    Variable assignment outside class definition

  9. 9

    In template class member function body outside class definition, when are template parameters required?

  10. 10

    declaration of templated function (over container type) inside class and definition of it outside a template class over container type-

  11. 11

    inner class method definition outside of a template class

  12. 12

    How do I define a template member function outside of a full specialized template class's definition?

  13. 13

    How do I define a template member function outside of a full specialized template class's definition?

  14. 14

    'super' outside of function or class

  15. 15

    @staticmethod or function outside class?

  16. 16

    static_assert inside/outside class definition

  17. 17

    TypeScript - How to add a method outside the class definition

  18. 18

    Reference instance method outside class definition

  19. 19

    TypeScript - How to add a method outside the class definition

  20. 20

    Run function with class and outside class

  21. 21

    How to 'return' outside function definition in typescript

  22. 22

    Move @AnalyzerDef Analyzer definition into a separated class

  23. 23

    Why we declare static variable in a class & the definition in outside of the class?

  24. 24

    Define operator[]() (array subscription) for template class outside of class definition

  25. 25

    outside definition of member class of an explicitly specialized member class

  26. 26

    Can't move variables outside of a function

  27. 27

    Overriding a function outside its class

  28. 28

    Error defining function outside the class

  29. 29

    Filing a vector outside of a function in a class

HotTag

Archive