CRTP i typedef z klasy parametrycznej

0

Jak coś takiego zrobić poprawnie? Kombinowałem z using oraz** typename**, ale ciągle wypluwa, że Type is not a member of Another

template< typename T >
class Some {
protected:
T::Type value;
public:
void Set( const T::Type& new_value ) { value = new_value; }
T::Type GetVal() const { return value; }
};

class Another : public Some< Another > {
public:
typedef float Type;
};
0

forward declaration of 'class Another'

0
typename T::Type value;
0

I pupsko. Dalej to samo.

1

może tak?

template <typename T>
class Some
{
public:
	void set(const T& newValue)
	{
		value = newValue;
	}

	T getValue() const
	{
		return value;
	}

protected:
	T value;
};

// ...

class Another : public Some<float>
{

};

// lub

template <typename T = float>
class Another : public Some<T>
{
public:
	using Type = T;
};
2

Czy takie rozwiązanie cię zadowala?

template< typename T >
class Some
{
protected:
    T value;
public:
    void Set(const T& new_value) { value = new_value; }
    T GetVal() const { return value; }
};

class Another : public Some< float >
{
    
};

Bo dla twojego przykładu nie ma żadnej potrzeby, żeby argumentem szablonu Some był Another

@Edit, up szybszy

0

To czy to ma sens czy nie ma to sprawa drugorzędna :D

Byłem po prostu ciekawy czy da radę coś takiego zrobić. Dzięki za odpowiedzi :)

1

@EvilOne i @Sopelek dają dobre rozwiązania praktyczne, ale to już nie są chyba CRTP. Jeśli trzymamy się pierwotnej wersji (dla celów edukacyjnych), to to wygląda jak (dosyć paskudne) rozwiązanie: http://stackoverflow.com/questions/5680263/use-curiously-recurring-template-pattern-crtp-with-additional-type-parameters

0

Oczywiście jak przeglądałem SO to nic nie znalazłem... ehh.
Faktycznie trochę szablonowy bajzel wychodzi :P

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