boost::array i list_of na własnym typie

0

Witam
Jako że używam windowsa 32bit i visuala to niestety nie mam funkcjonalności C++ 11 i jestem na razie skazany na boosta. Generator liczb pseudolosowych udało mi się użyć i teraz próbuję użyć boost::array i są problemy z tym.
Nie mam problemu gdy używam typu int w tablicy ale gdy np. próbuję użyć własnego typu danych to mi errorami sadzi, przykład:

    
#include <boost/array.hpp>
#include <boost/assign.hpp>
using namespace boost::assign;

typedef struct Node
    {
        Node():vertexNum(0){}
        Node(u32 num):vertexNum(num){}

        u32 vertexNum;
        list<Node *> childs1; 
        list<Node *> childs2;
        list<Node *> childs3;
    } Node;
....
boost::array<Node, MAX_NET_MOVABLE_VERTICES> mNetMovVertixes;
...
mNetMovVertixes = list_of<Goalnet::Node>Node(62)Node(63)Node(3)Node(1)Node(2) //back
                 Node(61)Node(60)Node(4)Node(0)Node(6)
                 Node(65)Node(64)Node(5)Node(9)Node(7)
                 Node(98)Node(99)Node(45)Node(43)Node(40) //top
                 Node(100)Node(101)Node(46)Node(49)Node(44)
                 Node(102)Node(103)Node(47)Node(48)Node(50)
                 Node(78)Node(80)Node(82) //left
                 Node(85)Node(86)Node(87)
                 Node(73)Node(70)Node(72)
                 Node(20)Node(23)Node(24) //right
                 Node(26)Node(27)Node(28)
                 Node(12)Node(13)Node(15);
1

Może by tak trochę prościej? :P

#include <iostream>
#include <boost/array.hpp>
#include <boost/assign.hpp>
#include <boost/foreach.hpp>

using namespace std;

struct foo{
    int x;
    foo(int x): x(x){}
};

int main(){
    boost::array<foo, 3> foos = {
        foo(1), foo(2), foo(3)
    };
    
    BOOST_FOREACH(foo const &f, foos){
        cout << f.x << endl;
    }
    
    return 0;
}

http://melpon.org/wandbox/permlink/MCA0lPti9rFKtPOM

Btw, Jako że używam windowsa 32bit i visuala to niestety nie mam funkcjonalności C++ 11 pierdzielenie.
Po prostu używasz visuala sprzed 6/8/11 lat.

0

W booscie nie ma initializer_list i zamiast tego jest "list_of". I z tym są problemy:

#include <iostream>
#include <boost/array.hpp>
#include <boost/assign.hpp>
#include <boost/foreach.hpp>

using namespace boost::assign;
using namespace std;

struct foo{
    int x;
    foo(int x): x(x){}
};

class A
{
    public:
    A():  foos(list_of(foo(1),foo(2),foo(3))){}
    
    private:
    boost::array<foo, 3> foos;
};

int main(){
       A a;
    
    return 0;
}

Jakieś wskazówki jak mieć C++11 na visualu na XP mile widziane. Przypominam tylko że przynajmniej od wersji visuala 11 xp nie jest supportowany.

2

MinGW, Clang...

0

Tak jak pisał @Mokrowski - vs nie jest bezkonkurencyjny na windowsie. Masz clanga, który bije na głowe kompilator od vs, , masz Qt Creator, masz CLion...

1

Jakieś wskazówki jak mieć C++11 na visualu na XP mile widziane. Przypominam tylko że przynajmniej od wersji visuala 11 xp nie jest supportowany.

Visuale nowsze niż 2010 nie działają na XP, ale można nawet w VS2015 kompilować programy dla XP.

Jako że używam windowsa 32bit

Chyba masz na myśli "Windowsa XP", bo bitowość nie ma tu nic do rzeczy. Jest 64-bitowy XP i jest 32-bitowy Win10.

0

Takie coś się kompiluje pod VS2008.

struct foo{
    int x;
    foo(int x)
		: x(x)
	{
	}
	foo()
		: x(0)
	{
	}
};
 
class A
{
public:
    A()
		: foos(list_of(1)(2)(3))
	{
	}
private:
    boost::array<foo, 3> foos;
};

Wymagany jest konstruktor domyślny. To oznacza jednak, że elementy są tworzone dwukrotnie, z kopiowaniem po drodze.
Jeśli klasa ma własny konstruktor kopiujący, to kod przestaje się kompilować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1