[VC++] template class-member functie

Pagina: 1
Acties:

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ik weet niet of het aan de compiler ligt of aan mezelf, maar waarom lukt dit niet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Blaat
{
private:
    double d;

public:
    template <class T> T func ()
    {
      return (T)d;
    }
};

int main ()
{
    Blaat b;
    int i = b.func<int> ();

    return 0;
}

(niet dat ik het zo gebruik, maar het is maar een simpel voorbeeld.) Ik krijg hier de error
error C2062: type 'int' unexpected
:?

Dit werkt toch ook:
code:
1
2
3
4
5
6
7
8
9
10
template <class T> T func ()
{
    return (T)10;
}

int main ()
{
    func<int> ();
    return 0;
}

waarom bij member functies dan niet :?

(als ik er trouwens een static classfunctie van maak dan krijg ik overigens een internal compiler error |:()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

b.func<int> ();

returnt geen waarde? of iig geen int?

roep ook maar wat

Doet iets met Cloud (MS/IBM)


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:29
Kan je het niet oplossen door van je class een template class te maken?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <class T>
class Blaat
{
  private:
     T  variable;

  public:
     T  func();
};

template<class T>
T Blaat::func()
{
 return variable;
}

Zoiets... (mind syntax errors, is al lang geleden dat ik nog templates gebruikt heb en heb geen zin om m'n boek erbij te pakken.)

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Op donderdag 03 januari 2002 10:56 schreef whoami het volgende:
Kan je het niet oplossen door van je class een template class te maken?
nee :)

Het voorbeeld zoals ik het hier gaf is ook absoluut niet hoe ik het gebruik. Het gaat erom dat als de compiler niet kan deduceren welk type/class ie voor T moet pakken, dan moet je dat met de hand kunnen specificeren. Bij normale functies werkt het prima, maar bij classmemberfuncties gaat ie over de zeik om een of andere reden :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Op donderdag 03 januari 2002 10:56 schreef D2k het volgende:
b.func<int> ();

returnt geen waarde? of iig geen int?

roep ook maar wat
je hoeft de returnwaarde niet persee af te vangen hoor :) Een functie die iets returnt kun je net zo aanroepen als een functie die void returnt (niets dus)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 03 januari 2002 11:03 schreef OiSyN het volgende:

[..]

je hoeft de returnwaarde niet persee af te vangen hoor :) Een functie die iets returnt kun je net zo aanroepen als een functie die void returnt (niets dus)
maar kan je dan wel dit zeggen?
int i = b.func<int> ();

Doet iets met Cloud (MS/IBM)


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

g++ en c++ vinden hem prima hoor

heb er alleen ff
code:
1
2
#include <iostream>
using namespace std;

boven gezet

Doet iets met Cloud (MS/IBM)


Verwijderd

Ben je nu niet gewoon een ingewikkelde manier aan het bedenken om een normale typecast uit te voeren?

Anyway... het probleem wat je hebt treedt niet op als ik je test code aan g++ voer (gcc version 2.95.2 20000220 (Debian GNU/Linux)), dus ik vermoed dat je een van de vele template bugs in VC++ bent tegen gekomen.
Dat gebeurt mij ook regelmatig... internal compiler errors eigenlijk alleen als ik wat spannends en moeilijks met templates van plan ben :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
oh wacht ik begreep je reactie verkeerd... ik dacht even dat je het over mijn 2e voorbeeld had :)

Ja hij returnt int, want die <int> geeft juist aan wat T is bij de template declaratie (zie ook het 2e voorbeeld, daar kan ik gewoon doen int i = func<int> ();)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Op donderdag 03 januari 2002 11:07 schreef Qlone het volgende:
Ben je nu niet gewoon een ingewikkelde manier aan het bedenken om een normale typecast uit te voeren?
hier wel ja, maar zoals ik al zei, dit is maar een voorbeeld, en niet hoe ik het toepas :)
Anyway... het probleem wat je hebt treedt niet op als ik je test code aan g++ voer (gcc version 2.95.2 20000220 (Debian GNU/Linux)), dus ik vermoed dat je een van de vele template bugs in VC++ bent tegen gekomen.
Dat gebeurt mij ook regelmatig... internal compiler errors eigenlijk alleen als ik wat spannends en moeilijks met templates van plan ben :)
godver, dat vermoeden had ik dus al :(
wat die internal compiler errors betreft... ik noem dit niet bepaald spannend:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Blaat
{
public:
    template <class T> static void func (T)
    {
    }
};

int main ()
{
    Blaat::func<int> (4);
    return 0;
}

maar moet je dat eens gaan compilen:
code:
1
2
3
4
5
fatal error C1001: INTERNAL COMPILER ERROR
      (compiler file 'msc1.cpp', line 1794) 
       Please choose the Technical Support command on the Visual C++ 
       Help menu, or open the Technical Support help file for more information
Error executing cl.exe.

:( |:( :r :'(

* .oisyn gaat (met waarschijnlijk valse hoop) kijken of er alweer een nieuwe MSVC++ service pack uit is

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op donderdag 03 januari 2002 11:13 schreef OiSyN het volgende:
maar moet je dat eens gaan compilen:
wederom no probs bij c++ en g++

Doet iets met Cloud (MS/IBM)


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op donderdag 03 januari 2002 10:52 schreef OiSyN het volgende:
Ik weet niet of het aan de compiler ligt of aan mezelf, maar waarom lukt dit niet:
[code]class Blaat
{
public:
template <class T> T func ();
};
Bekende ( Beruchte ) bug in MSVC++ 6, alle SPs.
Is ook de reden dat de STL van MSVC geen templated ctors heeft, zoals zou moeten. Ik geloof dat't in VC7 gefixed is maar da's uit m'n hoofd, anders is't 7.1

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1