C++ design question

3 отговора 221 прегледа
#1

C++ design question

Imam klas:
template<int N>
class A {
int ar[N];
}

class B : public A<5>
class C : public A<10>

dosega imah funkciq:

void f() {
B b;
b.ar[3] = 0;
}

no iskam tia veche da raboti i za obekti ot tip C. Kak bihte reshili tozi problem?

Edno reshenie koeto mi hrumva e da se napravi niakakyv klas AHolder (v nego da se
dyrjat obekti), koito da byde naslediavan ot BHolder i CHolder i tozi klas da ima
niakakyv getter za ar, koito da vikam v tazi funkciq. Primerno AHolder i BHolder
shte bydat:

class AHolder {
virtual ... getAr(...) = 0;
}
class BHolder {
B holdee;
... getAr(...) { return holdee.ar }
}

Отговор
в отговор на qcp #2

Re: C++ design question

пробвай това:
може и да ти свърши работа, но разбира се, трябва да се откажеш от локалните променливи. Просто ги подаваш на f() и след това си ги джуркаш както искаш...

template <int N>
class A
{
public:
int ar[N];
};


class B : public A<5>
{
};

class C : public A<10>
{
};

template <class T>
void f(T & x)
{
x.ar[3] = 0;
}

Отговор
в отговор на qcp #3

Re: C++ design question

или с нещо като traits:

struct Atr { typedef A Type;}
struct Btr { typedef B Type; }

template <class T>
void f(const T&)
{
T::Type b;
...
}

викаш
f(Atr());
f (Btr() );

Сигнатура!

Редактирано от Questor на

Отговор
в отговор на Huio #4

Re: C++ design question

mda, vchera syvsem ne se biah setil za templeitna funkciq.

Napravih go taka:

template <class T>
void f() {
T tralala;
}

i sled tova vikam primerno:
f<B>();

Отговор