Connecting Tech Pros Worldwide Forums | Help | Site Map

Template member function

pveglia@gmail.com
Guest
 
Posts: n/a
#1: Jul 19 '07
Hi everyone,
i've got a problem with a template function member of a non-template
class. My code is the following:

class PropMap
{
private:
std::map<std::string, void*properties;
public:
template<typename T>
T getProperty(std::string key)
{
return reinterpret_cast<T>(properties[key]);
}


T setProperty(std::string key, T value)
{
return reinterpret_cast<T>(properties[key] = value);
}
};

when i try to call the "getProperty" method:

int* i = getProperty<int*>("pos");

I get the error: "expected primary function". I think gcc doesn't know
that getProperty() is a template by I don't know why. Is there any
workaround to fix this?
Thank you very much.
Paolo

Robert Bauck Hamar
Guest
 
Posts: n/a
#2: Jul 19 '07

re: Template member function


pveglia@gmail.com wrote:
Quote:
Hi everyone,
i've got a problem with a template function member of a non-template
class. My code is the following:
>
class PropMap
{
private:
std::map<std::string, void*properties;
std::map not declared
std::string not declared

You forgot to #include <mapand <string>
Quote:
public:
template<typename T>
T getProperty(std::string key)
{
return reinterpret_cast<T>(properties[key]);
}
>
>
template <typename T>
Quote:
T setProperty(std::string key, T value)
{
return reinterpret_cast<T>(properties[key] = value);
}
};
>
when i try to call the "getProperty" method:
>
int* i = getProperty<int*>("pos");
PropMap pm;
int *i = pm.getProperty<int*>("pos");

compiles on my g++. You should post a minimal, but complete program that
shows the error.
Quote:
>
I get the error: "expected primary function". I think gcc doesn't know
that getProperty() is a template by I don't know why.
It isn't. PropMap::getProperty is.

--
rbh
Paolo Veglia
Guest
 
Posts: n/a
#3: Jul 19 '07

re: Template member function


Robert Bauck Hamar wrote:
Quote:
pveglia@gmail.com wrote:
>
Quote:
>Hi everyone,
>i've got a problem with a template function member of a non-template
>class. My code is the following:
>>
>class PropMap
>{
>private:
>std::map<std::string, void*properties;
>
std::map not declared
std::string not declared
>
You forgot to #include <mapand <string>
>
Quote:
>public:
> template<typename T>
>T getProperty(std::string key)
>{
>return reinterpret_cast<T>(properties[key]);
>}
>>
>>
>
template <typename T>
>
Quote:
>T setProperty(std::string key, T value)
>{
>return reinterpret_cast<T>(properties[key] = value);
>}
>};
>>
>when i try to call the "getProperty" method:
>>
>int* i = getProperty<int*>("pos");
>
PropMap pm;
int *i = pm.getProperty<int*>("pos");
>
compiles on my g++. You should post a minimal, but complete program that
shows the error.
>
Quote:
>I get the error: "expected primary function". I think gcc doesn't know
>that getProperty() is a template by I don't know why.
>
It isn't. PropMap::getProperty is.
>
Thank you for your reply!

I wrote a little esample using that class and it works, but I still
can't compile my program. Unfortunately I'm not able to reproduce the
error with an example.
Jim Langston
Guest
 
Posts: n/a
#4: Jul 19 '07

re: Template member function


"Paolo Veglia" <pveglia@gmail.comwrote in message
news:f7nml5$8j3$1@aioe.org...
Quote:
Robert Bauck Hamar wrote:
Quote:
> pveglia@gmail.com wrote:
>>
Quote:
>>Hi everyone,
>>i've got a problem with a template function member of a non-template
>>class. My code is the following:
>>>
>>class PropMap
>>{
>>private:
>>std::map<std::string, void*properties;
>>
>std::map not declared
>std::string not declared
>>
>You forgot to #include <mapand <string>
>>
Quote:
>>public:
>> template<typename T>
>>T getProperty(std::string key)
>>{
>>return reinterpret_cast<T>(properties[key]);
>>}
>>>
>>>
>>
>template <typename T>
>>
Quote:
>>T setProperty(std::string key, T value)
>>{
>>return reinterpret_cast<T>(properties[key] = value);
>>}
>>};
>>>
>>when i try to call the "getProperty" method:
>>>
>>int* i = getProperty<int*>("pos");
>>
>PropMap pm;
>int *i = pm.getProperty<int*>("pos");
>>
>compiles on my g++. You should post a minimal, but complete program that
>shows the error.
>>
Quote:
>>I get the error: "expected primary function". I think gcc doesn't know
>>that getProperty() is a template by I don't know why.
>>
>It isn't. PropMap::getProperty is.
>>
Thank you for your reply!
>
I wrote a little esample using that class and it works, but I still
can't compile my program. Unfortunately I'm not able to reproduce the
error with an example.
I find it hard to believe you can't reproduce the error with an example.
Perhaps the example needs to be extremely large (like all your source) but
it should be possible. Without seeing what you're trying, we can't help.


Closed Thread