问题
As used in this answer, I'm looking for a C++11 compatible code for the same but the usage of std::quoted
prevents me from achieving that. Can anyone suggest an alternative solution?
回答1:
I give my answer assuming that you expect to find a generic approach to handle such situations. The main question that defines the guideline for me is: "How long am I supposed to maintain this code for an older compiler version?"
- If I'm certain that it will be migrated to the newer toolset along with the rest of the code base (even though in a few years time, but it will inevitably happen), then I just copy-paste implementation from the standard headers of the next target version of my compiler and put it into
namespace std
in a separate header within my code base. Even though it's a very rude hack, it ensures that I have exactly the same code version as the one I'll get after migration. As I start using newer (in this case C++14-compatible) compiler, I will just remove my own"quoted.h"
, and that's it.
Important Caveat: Barry suggested to copy-paste gcc's implementation, and I agree as long as the gcc
is your main target compiler. If that's not the case, then I'd take the one from your compiler. I'm making this statement explicitly because I had troubles when I tried to copy gcc's std::nested_exception
into my code base and, having switched from Visual Studio 2013 to 2017, noticed several differences. Also, in the case of gcc
, pay attention to its license.
- If I'm in a situation where I'll have to maintain compatibility with this older compiler for quite a while (for instance, if my product targets multiple compiler version), then it's more preferable first of all to look if there's a similar functionality available in Boost. And there is, in most cases. So check out at Boost website. Even though it states
"Quoted" I/O Manipulators for Strings are not yet accepted into Boost as public components. Thus the header file is currently located in
you are able to use it from "boost/detail". And, I strongly believe that it's still better than writing your own version (despite the advice from Synxis), even though the latter can be quite simple.
- If you're obliged to maintain the old toolset and you cannot use Boost, well...then it's maybe indeed worth thinking of putting your own implementation in.
来源:https://stackoverflow.com/questions/45266325/c11-equivalent-to-stdquoted-introduced-in-c14