Porting kodu Java na C++

0

Cześć,

chciałem przepisać taki kod z Javy do C++ jak poniżej. Proszę Was o opinię jak to można najlepiej zrealizować, żeby rozwiązanie było..rozsądne i dobre.

package some.package;

public class TYPE {

	private long code;

	public static final TYPE type1 = new TYPE(0L);
	public static final TYPE type2 = new TYPE(1L);
	public static final TYPE type3 = new TYPE(2L);
	public static final TYPE type4 = new TYPE(3L);

	public TYPE(long code) {
		this.code = code;
	}

	public long getCode() {
		return code;
	}

	public String toString() {
		return this.getClass().getSimpleName() + " [code=" + code + "]";
	}
}

Tyle na ile znam się na Javie, to deklarują typ TYPE i od razu statyczne zmienne tego typu w tej klasie. (Dodatkowo metody na zwracanie aktualnie ustawionego kodu i metoda toString. Tą ostatnią sie nie przejmujcie, bo używając Qt jest to do zrobienia). Tak więc, w C++ jak by to można było zrobić najładniej? Stworzyć klasę TYPE i w innej statyczne składniki własnie tego typu? Przy takim rozwiązaniu tworzymy dwie klasy, co w przypadku kilkunastu rodzajów tej klasy TYPE może być klopotliwe.

Proszę o radę kogoś bardziej doświadczonego :)

0

Może coś takiego?

#include <string>

namespace some_package {
	class type {
		long code_;
	public:
		constexpr type(long code):
			code_(code)
		{}
		
		constexpr auto code() const {
			return code_;
		}
		
		friend std::string to_string(type const &t) {
			return std::to_string(t.code());
		}
		
		struct constants;
	};
	
	struct type::constants {
		static constexpr type type1 = type(1);
		static constexpr type type2 = type(2);
		/* etc */
	};
}

i używasz np tak:

int main() {
	std::cout << to_string(some_package::type::constants::type1);
	std::cout << some_package::type::constants::type2.code();
	return 0;
}

http://ideone.com/rrdcsr

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