Using Factory pattern for parsing system
Design issues

You are unnecessarily restricting the Parser interface by forcing fs to be a std::ifstream&amp; when std::istream&amp; would work as well.
AParser::DoParsing(AData&amp;, std::ifstream&amp;) should be marked override. Same for BParser::DoParsing(BData&amp;, std::ifstream&amp;).
I can't see any specific purpose for IParsing: Why not call AParser::DoParsing or BParser::DoParsing directly?
Besides, parameter d of IParsing::action(std::shared_ptr&lt;Parser&lt;T&gt;&gt; p, T d, std::ifstream&amp; fs) should be of type T&amp;.
FParsing::HandleParsing(std::string, Data&amp;, std::ifstream&amp;) doesn't use any class instance members. Maybe make it static?
Also, parameter type from that function should probably be an enum - no need to use strings for that.
Why allocate two std::shared_ptr in case a valid parser is found if they won't be shared and will be deallocated once the function returns?
What advantage do you hope to get from this extravagant implementation over overloading operator&gt;&gt;(std::istream&amp;, AData&amp;) and operator&gt;&gt;(std::istream&amp;, BData&amp;) instead?