C++ - Reddit
227 subscribers
48 photos
8 videos
1 file
25.4K links
Stay up-to-date with everything C++!
Content directly fetched from the subreddit just for you.

Join our group for discussions : @programminginc

Powered by : @r_channels
Download Telegram
Are there any modern cross-platform lightweight open source alternatives to libexecstream?

I am working on a lightweight open source cross-platform project (windows and posix systems) where it would be really good to be able to communicate with other processes using standard streams.

[Pstreams](https://pstreams.sourceforge.net/) is awesome but it's posix only (except for a really old unsupported version with way less features that I can't even find). I came across [libexecstream](https://libexecstream.sourceforge.net/) but I get all [these](https://pastebin.com/EyVCYgwb) compiler warning when I compile it on my machine (running ubuntu 18.04 LTS with gcc 7.4.0).

Are there any good modern alternatives? Otherwise does anyone think they could do a cleaned up fork of libexecstream with all the warnings fixed up? It would be a useful contribution to the C++ community. I could probably fix some of them like return values being ignored (just put in a dummy variable), but I'm not sure what to do about the anonymous namespace warnings etc..

A good lightweight cross-platform open source solution is sorely missing..

https://redd.it/euwp1y
@r_cpp
How to start?

Hello everyone! I am am individual who wants to learn c++ in my spare time but have no clue where to start. I know I need a program to write the language and a compiler but don't know if I need to buy one or if there are free ones. Any help would be appreciated. I am currently only on mac : ( but will have a pc in a couple of months.
Thank you in advance!!

https://redd.it/ev0msx
@r_cpp
Struggle with making project

Hello, I have a goal to build a simple project by myself in order to get better at programming. My current idea is doing some tank game similar to one in atari. It will be 2d, the view will be from top. Problem is that I don't know what stages I should follow, how should I plan and design the project, I want to make this as good as possible, and it should be using most of the good programming practices. Would you suggest me some tactics to follow, or perhaps some programs for designing the classes and plans to get things visual and easier to understand.

https://redd.it/ev47yr
@r_cpp
STL header token parsing benchmarks for libstdc++ 7, 8 and 9

To match [the results for VS2019 posted yesterday](https://www.reddit.com/r/cpp/comments/eumou7/stl_header_token_parsing_benchmarks_for_vs2017/) where we found that the VS2019 STL has become 9% lighter in preprocessor parsing time than the VS2017 STL, here are the same for libstdc++ 7, 8 and 9:

Graph of libstdc++-9: https://raw.githubusercontent.com/ned14/stl-header-heft/master/graphs/libstdc++-9.png

Comparative graph: https://raw.githubusercontent.com/ned14/stl-header-heft/master/graphs/libstdc++-history.png

Detailed notes: https://github.com/ned14/stl-header-heft/blob/master/Readme.libstdc++.md

Project github: https://github.com/ned14/stl-header-heft

You may remember from [the last test performed two years ago](https://www.reddit.com/r/cpp/comments/83rf8o/stl_header_token_parsing_benchmarks_for_libstdc_5/?st=jf0t6mob&sh=817e7a37) that libstdc++ had engorged itself between libstdc++-5 and libstdc+-7 by **+25.7%**. I can report that libstdc++-9 has further engorged itself over libstdc++-7 by **+16%**. That's almost linear with time, which I find fascinating.

There is good news here though. Whilst the average and median has become much worse, all of the pathological individual headers in libstdc++-9 have been fixed e.g. `array` and `iterator` were dragging in lots of unneeded stuff which they no longer do. In this sense, both the libstdc++ and VS STLs have greatly improved in the past two years by not sub-including unnecessary headers. My congratulations to the libstdc++ authors and maintainers for this work!

If there was any one area where I think libstdc++ is particularly deficient, it is that any of its threading headers basically drag in the exact same stuff, most of which isn't actually needed by the individual header. MSVC's STL proves that this isn't necessary, `<thread>` is much lighter weight than any of the other threading headers on MSVC, but is the heaviest weight threading header on libstdc++, for example.

All that said, libstdc++ has *far* more very light weight headers than the MSVC STL e.g. `<type_traits>` on libstdc++ really is a class leader compared to the hefty `<type_traits>` on MSVC. MSVC *could* do much better here, a huge include for MSVC is `<sal.h>` which absolutely everything drags in, and is very low hanging fruit to prune in my opinion.

https://redd.it/ev4e7g
@r_cpp
Question about Vectors

This is a noobie question, but when using Vectors, whats the difference between using insert, emplace, & push_back?

Is this based purely on preferences or is there a specific use for each case?

I tried running some of the examples from the Geeksforgeeks website, but the differences aren't obvious to me

[Vector Example I'm Running](https://www.geeksforgeeks.org/vector-assign-in-c-stl/)

[emplace vs insert example I'm Running] (https://www.geeksforgeeks.org/emplace-vs-insert-c-stl/)

Any help would be greatly appreciated. Thank you

https://redd.it/ev5pys
@r_cpp
Difference between string and stringstream

Hi! I'm taking a course on C++ so I'm still on the basics. I couldn't grasp the difference between a stringstream and a string. Would anyone care to explain? Thank you!

https://redd.it/ev4ttw
@r_cpp
Type trait I made wont work in MSVC

So I made a type trait as a learning exercise that is supposed to check if the first type of the template parameters is the same as any of the other types in the template parameter pack.

//Checks if type T is any of the types provided as ARGS...
//I could have done this using a much simpler function template but I wanted the interface to be similar to stl type traits
namespace TRAIT_TYPE_HELPERS
{
template <typename T, typename = void, typename ... ARGS>
struct is_one_of_helper : std::false_type {};

template <typename T, typename ... ARGS>
struct is_one_of_helper <T, std::enable_if_t<(std::is_same_v<T, ARGS> || ...)>, ARGS...> : std::true_type {};
}

//Main type trait
template <typename T, typename ... ARGS>
using is_one_of = TRAIT_TYPE_HELPERS::is_one_of_helper<T, void, ARGS...>;

//convenience template
template <typename T, typename ... ARGS>
constexpr bool is_one_of_v = is_one_of<T, ARGS...>::value;

int main()
{
std::cout << is_one_of<int, char, float, double, int>::value;
}

The above test code prints out zero in MSVC (Visual Studio 16.4.3) but it prints out 1 in GCC 7.4.0.
When I change the SFINAE line from std::is_same_v<T, ARGS> to std::is_same<T, ARGS>::value, it prints out 1 on both platforms.

I was just wondering if this is a bug in MSVC or maybe them not implementing the standard fully yet or just me incorrectly making assumptions on what should work and what shouldn't.

Discussion is appreciated.

https://redd.it/ev7r87
@r_cpp
single source as header & source

I was thinking about that for header only you sometimes need to do tricks when having a compilation unit would make it easier. Maybe next level is header & source combined. I went over to [documentation of gcc](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html) and found \_\_INCLUDE\_LEVEL\_\_.

&#x200B;

base.cpp

#if __INCLUDE_LEVEL__

int function();
#else

int function() {
return 42;
}
#endif


main.cpp

#include "base.cpp"

#include <iostream>

int main() {
std::cout << function() << "\n";
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(Combined VERSION 1.0.0 LANGUAGES CXX)
add_executable(main base.cpp main.cpp)

I have compiled and successfully linked this. I think it's interesting that this is possible, and also interesting that this hasn't caught on. Whether it's a good idea or not I don't know as I haven't done this in practice. But after trying this proof of concept, I'm more tempted to do this. [Clang](https://clang.llvm.org/docs/LanguageExtensions.html) seems to support it too, but can't find anything similar to [MSVC](https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019). What's nice is no extra parameters needed to be invented. Obviously the downside that if implementation changes then its parents need to be compiled too. But for distributing something like a header only library. and if you only support Clang and gcc, then this works kind of nicely. Maybe something like this can have a new extension something like `.cpph`.

https://redd.it/evhzqb
@r_cpp