Re: How to make code accepting differet types work?
Jim Langston wrote:
"Ian Collins" <ian-news@hotmail.com> wrote in message
news:4hk3pfF1rcl0rU1@individual.net...
Jim Langston wrote:
This is something I've been thinking about creating, and am trying
to get the pieces together.
I want to be able to assign values in a method accepting different
types. I.E.
MyInstance.MyMethod("IntField") = 1;
MyInstance.MyMethod("FloatField") = 2.34f;
MyInstance.MyMethod("StringField") = std::string("Hello");
Is this possible?
Assign to what?
Could you use a map and have something like MyInstance["IntField"] =
1?
MyInstance will, in fact, have a map, but the values will be
std::string. If I was using method overloading it would be something
like (untested code):
void MyInstance::MyMethod( std::string key, int value )
{
std::map<std::string, std::string>::iterator it = MyMap.find(key);
if ( it != MyMap.end() )
it.second = jml::StrmConvert( value );
}
StrmConvert is a template that uses stringstream to convert between
types, in this case to a std::string.
Yes, I know I can actually use this, but I would prefer to use
operator= as it just seems more natural to me.
I didn't see the beginning of the conversation, but here is my take on
what you're asking about (as I understand it):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <string>
#include <map>
class MyClass {
std::map<std::string,int> i;
std::map<std::string,float> f;
std::map<std::string,std::string> str;
public:
class MyProxy {
MyClass& mc;
std::string key;
public:
MyProxy(MyClass& m, std::string const& k) : mc(m), key(k) {}
void operator =(int i) { mc.i[key] = i; }
void operator =(float f) { mc.f[key] = f; }
void operator =(std::string const &s) { mc.str[key] = s; }
};
MyProxy MyMethod(std::string const& k) {
return MyProxy(*this,k);
}
};
int main() {
MyClass MyInstance;
MyInstance.MyMethod("OneInt") = 0;
MyInstance.MyMethod("TwoInt") = 42;
MyInstance.MyMethod("OneFloat") = 1.0f;
MyInstance.MyMethod("TwoFloat") = 3.14159f;
MyInstance.MyMethod("OneString") = "blah";
MyInstance.MyMethod("TwoString") = "blahblah";
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enjoy!
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask