Jump to content
  • Advertisement
Sign in to follow this  
garyfletcher

Using boost:::variant - what am I doing wrong? (SOLVED)

This topic is 4710 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a DLL that has a boost::variant type typedef boost::variant<int, std::string> argTypes; and I've got an argTypes declared argTypes myArgs; at runtime myArgs is populated with some value (int or std::string) and I'm trying to retrieve that value into an argument (argValue), who's type isn't known. I've got a template function that is attempting to get the value of args that matches the current type of argValue, but I'm having lots of problems getting that value. I've got:
typedef boost::variant< int, std::string, const char*, char*, float, double, 
                       unsigned int, unsigned char, long int > argTypes;

argTypes myArgs;

template < class aType >
bool mGetArgValue(aType& argValue)
{
  argValue= boost::get< aType >(myArgs);  
}





calling from my project that uses the DLL like
int arg1;
std::string arg2;
    
std::cout << "Get arg1" << std::endl;
    
if(!GE->mGetArgValue(arg1)
{
    std::cout << "Unable to get arg1" << std::endl;   
    return false; 
}
    
std::cout << arg1 << std::endl;
    
std::cout << "Get arg2" << std::endl;
    
if(!GE->mGetArgValue(arg2))
{
   std::cout << "Unable to get arg2" << std::endl;   
   return false; 
}
    
std::cout << "arg2 = " << arg2 << std::endl;





Everything seems to work if when I'm retrieving arg1 (int), but I get a problem when I try to get arg2 (std::string) and get the following DEV-C++ messagw runtime message to stderr: "This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information." I get this to stdout: Get arguments Get arg1 70 Get arg2 Where the arguements I put into args where: std::string aString = "arg1"; int anInt = 70; But from the boost documentation on boost:get<> I'm using it correctly? Anyone got any ideas? Do I need to use static_visitor<>, although I have tried this as well and get compile time errors in the project if I try to use myArgs as a return type like this:
class mGetArg : public boost::static_visitor< myArgs >
{
    public:
        template < typename T >
        T& operator()(T& operand1, T& operand2) const
        {
            operand2 = operand1;
                    
            return operand2;
        }

};

Do you need to explicitly define the return type when using a binary visitor, this seems to defeat the object a little.



??????? [Edited by - garyfletcher on June 30, 2005 5:41:38 PM]

Share this post


Link to post
Share on other sites
Advertisement
Sorted it. I was actually putting a const char* into my arguments list not a std::string...guess I need some exception handling in there.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!