Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

03.07.2009, 17:59

Zitat von »"Databyte"«

EDIT: naja das is auch nicht das beste... ich glaub ich mache das mit den defines ;) (also das was david angesprochen hatte )

Wieso? Definiere die Templates nochmal für 2, 1 und 0 Parameter und du bist fertig. In der main() habe ich ein Beispiel, wie du es aufrufen kannst. Es werden nur Strings übergeben und ein String wird zurückgeliefert. Konvertiert wird automatisch! Das könntest du so direkt in dein Programm einbauen, denke ich.

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

12

03.07.2009, 18:50

Hehe ich meinte nicht deine Lösung ;) sondern die die der Artikel beschreibt ;)

Hmm deine andere Lösung ist auch nicht schlecht... ich werd mir mal überlegen was ich da mache ;)

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

13

03.07.2009, 23:31

Zitat von »"David Scherfgen"«

Das könntest du so direkt in dein Programm einbauen, denke ich.


Hab mich jetzt doch für diese Variante entschieden und das ganze so
immplementiert (ist sogar noch ein bisl Konfortabler ;) )


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

typedef vector<string> params;


template<typename T>
inline const T fromString(const std::string& s)
{
    std::istringstream stream(s);
    T result;
    stream >> result;
    return result;
}

class Caller
{
public:
    virtual void Call(const params&) = 0;
};


template<typename P1, typename P2>
class Caller_void_2
    : public Caller
{
public:
    typedef void (* t_funcType)(P1, P2);


    Caller_void_2(t_funcType _func)
        : m_func(_func)
    {}


    void Call(const params& _params)
    {
        m_func(fromString<P1>(_params[0]), fromString<P2>(_params[1]) );
    }

private:
    t_funcType  m_func;
};



template<typename P1>
class Caller_void_1
    : public Caller
{
public:
    typedef void (* t_funcType)(P1);


    Caller_void_1(t_funcType _func)
        : m_func(_func)
    {}


    void Call(const params& _params)
    {
        m_func( fromString<P1>(_params[0]) );
    }

private:
    t_funcType  m_func;
};





template<typename P1>
Caller* Register(void (* _func)(P1))
{
    return new Caller_void_1<P1>(_func);
}

template<typename P1, typename P2>
Caller* Register(void (* _func)(P1, P2))
{
    return new Caller_void_2<P1, P2>(_func);
}


void Test(float a, int b)
{
    cout << "a: " << a << "\nb: " << b;
}

int main(int argc, char* argv[])
{
    Caller* caller = Register(&Test);

    params param;
    param.push_back("3.22");
    param.push_back("777");

    caller->Call(param);

    cin.get();
    return 0;
} 

Werbeanzeige