First of, I'm a C++ engineer for almost 12 years now. You would never be able to create souch rich context as in XNA in souch a short period of time. The main problem is, that C++ in theory offers too much but in praxis provides very little. For example, thare are no strings in C++. You have to use array of buffers or you take STL. But, if you take STL, there is no guarantee that it is fully supported on Linux. Besides, many compilers do not even support STL by default, you have to download some additional libraries. When you get the libraries, you'll most probably run into compiler issues.
Also, there are almost no usable C++ classes out of the box. You need to provide them by yourself. Even OpenGL. You can't load a signle texture seeking for the code to open BMP or don't even think about DDS. Once you solve that, most probably with a library, that library will most offen not work cross platform. So you get stuck again.
And directx? Compared to XNA ? Oh dear jesus. Did you know, there are no classes except for the Gui? Everything is so basic in C++, you get down to ints and floats. There is no model class, there is no resource manager, there is no audio manager. You need to write / provide wrappers by yourself.
At the beginning it is interesting, but as more time you put into it, the more pitfalls come up and you get frustrated.
If you're not able to finish a game in XNA you will never be able to finish it in C++. That's my practical answer.
C++ simply offers to little in praxis. You should take a tool where you can quickly provide results. That's not C++. That's XNA.