Avatar billede narrr Nybegynder
15. august 2004 - 12:28 Der er 7 kommentarer og
1 løsning

Argumenter til en template funktion

Hvis jeg nu har følgende funktion:
template<int t> void func()
{
    cout << t << endl;
}

Er der så nogen der kan forklare mig hvorfor dette:
int main()
{
    int x = 10;
    func<x>();
}
...fejler

mens dette:
int x = 10;
int main()
{
    func<x>();
}
...virker?
Avatar billede arne_v Ekspert
15. august 2004 - 12:31 #1
Ingen af delene compiler hos mig !

Kun:

const int x = 10;
int main()
{
    func<x>();
}

virker.

Fordi det skal være en konstant !
Avatar billede arne_v Ekspert
15. august 2004 - 12:33 #2
Og det er vel også ret logisk.

En template der skal genereres kode for på compile tidspunkt skal vel have
en konstant.
Avatar billede arne_v Ekspert
15. august 2004 - 12:34 #3
Iøvrigt bruger jeg normalt templates mere a la:

#include <iostream>

using namespace std;

template<class t> void func(t val)
{
    cout << val << endl;
}

int main()
{
    func<int>(10);
    func<char *>("ABC");
}
Avatar billede narrr Nybegynder
15. august 2004 - 12:43 #4
Jeg ved ikke om det et noget specielt ved VC 7.0, men denne kode printer det tal man inputter:
---
#include <iostream>
using namespace std;

template<int t> void func()
{
    cout << t << endl;
}

int x = 10;
int main()
{
    cin >> x;
    func<x>();
}
---

Samme kode fejler i DevC++.
Avatar billede arne_v Ekspert
15. august 2004 - 12:50 #5
Hos mig:

g++ 3.1:

zzz.cpp: In function `int main()':
zzz.cpp:13: non-constant `x' cannot be used as template argument
zzz.cpp:13: no matching function for call to `func()'

MS VC++ 6:

zzz.cpp
zzz.cpp(13) : error C2973: 'func' : invalid template argument 't'
        zzz.cpp(4) : see declaration of 'func'

MS VC++ 7.1:

zzz.cpp
zzz.cpp(13) : error C2975: 't' : invalid template argument for 'func', compile-time evaluatable constant expression expected
        zzz.cpp(4) : see declaration of 't'

BCB 5.5:

virker

g++ 3.2:

zzz.cpp: In function `int main()':
zzz.cpp:13: non-constant `x' cannot be used as template argument
zzz.cpp:13: no matching function for call to `func()'
Avatar billede narrr Nybegynder
16. august 2004 - 19:10 #6
NÅ, det var da underligt med de compilere.. Du må godt få nogle points, arne.
Avatar billede arne_v Ekspert
16. august 2004 - 19:12 #7
Det ser ihvertfald ikke ud til at være en feature du skal satse på virker.

(jeg kan nu heller ikke helt se pointen)
Avatar billede arne_v Ekspert
16. august 2004 - 19:12 #8
og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester