
Chris Hamilton wrote:
The reason I want this, is to have a nice String variant, that encapsulates the various forms a string can take in a current project: std::strings, char*'s, and std::string* and boost::shared_ptr<std::string>. I want functions to be able to handle all of these types transparently by using variants as the argument types. Allowing "const std::string&" as a variant type allows this to be done while not requiring a wasteful string copy.
Why can't you simply use std::pair<const char*, size_t>? That seems to cover all possibilities already... (assuming std::string is contiguous, which is true in the real world).
The String example is only example. I'm considering using boost::variant as a way to add relatively simple runtime polymorphism for parameters passed to a function. It may be desirable to do this using references for certain large data types that you'd rather not pass by value. (I realize you could do this with pointers, but why not be able to handle references as well?) Chris